prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Add official support for Python 3.12
  ## Description
  <!-- Is your feature request related to a problem? A clear and concise description of what the problem is: "I'm always frustrated when ..." -->
  Kedro itself probably works on Python 3.12 already, it would be nice to declare official support.
  
  However, installing Kedro is one thing, but installing the typical dependencies might not be straightforward. For example, I just tested the spaceflights starter and most of the dependencies have already published precompiled wheels for Python 3.12 (at least for M1 Mac), but two of them are still problematic as of today:
  
  - aiohttp https://github.com/aio-libs/aiohttp/issues/7739 worked by installing the beta version as advised there, so it will be solved soon (edit: fixed ✔️)
  - pyzmq https://github.com/zeromq/pyzmq/issues/1907 (M1 specific), didn't work after installing the ZMQ header libraries with mamba (edit: fixed ✔️)
  
  ## Context
  <!-- Why is this change important to you? How would you use it? How can it benefit other users? -->
  #2815 was already completed, but officially Kedro does not support Python 3.12 yet.
  
  You can use Kedro on Python 3.12 by manually disabling the warning.
  
  ## Possible Implementation
  <!-- (Optional) Suggest an idea for implementing the addition or change. -->
  Wait a bit until at least the spaceflights starter can be safely installed in most mainstream platforms.
  
  ## Possible Alternatives
  <!-- (Optional) Describe any alternative solutions or features you've considered. -->
  Declare Python 3.12 support already, at the cost of creating some grievance of users that then proceed to install some dependencies.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `kedro/__init__.py`
  Content:
  ```
  1 """Kedro is a framework that makes it easy to build robust and scalable
  2 data pipelines by providing uniform project templates, data abstraction,
  3 configuration and pipeline assembly.
  4 """
  5 
  6 import sys
  7 import warnings
  8 
  9 __version__ = "0.19.3"
  10 
  11 
  12 class KedroDeprecationWarning(DeprecationWarning):
  13     """Custom class for warnings about deprecated Kedro features."""
  14 
  15 
  16 class KedroPythonVersionWarning(UserWarning):
  17     """Custom class for warnings about incompatibilities with Python versions."""
  18 
  19 
  20 if not sys.warnoptions:
  21     warnings.simplefilter("default", KedroDeprecationWarning)
  22     warnings.simplefilter("error", KedroPythonVersionWarning)
  23 
  24 if sys.version_info >= (3, 12):
  25     warnings.warn(
  26         """Kedro is not yet fully compatible with this Python version.
  27 To proceed at your own risk and ignore this warning,
  28 run Kedro with `python -W "default:Kedro is not yet fully compatible" -m kedro ...`
  29 or set the PYTHONWARNINGS environment variable accordingly.""",
  30         KedroPythonVersionWarning,
  31     )
  32
  ```
  
  Path: `kedro/config/abstract_config.py`
  Content:
  ```
  1 """This module provides ``kedro.abstract_config`` with the baseline
  2 class model for a `ConfigLoader` implementation.
  3 """
  4 from __future__ import annotations
  5 
  6 from collections import UserDict
  7 from typing import Any
  8 
  9 
  10 class AbstractConfigLoader(UserDict):
  11     """``AbstractConfigLoader`` is the abstract base class
  12         for all `ConfigLoader` implementations.
  13     All user-defined `ConfigLoader` implementations should inherit
  14         from `AbstractConfigLoader` and implement all relevant abstract methods.
  15     """
  16 
  17     def __init__(
  18         self,
  19         conf_source: str,
  20         env: str | None = None,
  21         runtime_params: dict[str, Any] | None = None,
  22         **kwargs: Any,
  23     ):
  24         super().__init__()
  25         self.conf_source = conf_source
  26         self.env = env
  27         self.runtime_params = runtime_params or {}
  28 
  29 
  30 class BadConfigException(Exception):
  31     """Raised when a configuration file cannot be loaded, for instance
  32     due to wrong syntax or poor formatting.
  33     """
  34 
  35     pass
  36 
  37 
  38 class MissingConfigException(Exception):
  39     """Raised when no configuration files can be found within a config path"""
  40 
  41     pass
  42
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/kedro/__init__.py b/kedro/__init__.py
  --- a/kedro/__init__.py
  +++ b/kedro/__init__.py
  @@ -21,7 +21,7 @@
       warnings.simplefilter("default", KedroDeprecationWarning)
       warnings.simplefilter("error", KedroPythonVersionWarning)
   
  -if sys.version_info >= (3, 12):
  +if sys.version_info >= (3, 13):
       warnings.warn(
           """Kedro is not yet fully compatible with this Python version.
   To proceed at your own risk and ignore this warning,
  diff --git a/kedro/config/abstract_config.py b/kedro/config/abstract_config.py
  --- a/kedro/config/abstract_config.py
  +++ b/kedro/config/abstract_config.py
  @@ -26,6 +26,17 @@
           self.env = env
           self.runtime_params = runtime_params or {}
   
  +    # As of Python 3.12 __getitem__ is no longer called in the inherited UserDict.get()
  +    # This causes AbstractConfigLoader.get() to break
  +    # See: https://github.com/python/cpython/issues/105524
  +    # Overwrite the inherited get function with the implementation from 3.11 and prior
  +    def get(self, key: str, default: Any = None) -> Any:
  +        "D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None."
  +        try:
  +            return self[key]
  +        except KeyError:
  +            return default
  +
   
   class BadConfigException(Exception):
       """Raised when a configuration file cannot be loaded, for instance
  
verification_info: {"golden_diff": "diff --git a/kedro/__init__.py b/kedro/__init__.py\n--- a/kedro/__init__.py\n+++ b/kedro/__init__.py\n@@ -21,7 +21,7 @@\n     warnings.simplefilter(\"default\", KedroDeprecationWarning)\n     warnings.simplefilter(\"error\", KedroPythonVersionWarning)\n \n-if sys.version_info >= (3, 12):\n+if sys.version_info >= (3, 13):\n     warnings.warn(\n         \"\"\"Kedro is not yet fully compatible with this Python version.\n To proceed at your own risk and ignore this warning,\ndiff --git a/kedro/config/abstract_config.py b/kedro/config/abstract_config.py\n--- a/kedro/config/abstract_config.py\n+++ b/kedro/config/abstract_config.py\n@@ -26,6 +26,17 @@\n         self.env = env\n         self.runtime_params = runtime_params or {}\n \n+    # As of Python 3.12 __getitem__ is no longer called in the inherited UserDict.get()\n+    # This causes AbstractConfigLoader.get() to break\n+    # See: https://github.com/python/cpython/issues/105524\n+    # Overwrite the inherited get function with the implementation from 3.11 and prior\n+    def get(self, key: str, default: Any = None) -> Any:\n+        \"D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.\"\n+        try:\n+            return self[key]\n+        except KeyError:\n+            return default\n+\n \n class BadConfigException(Exception):\n     \"\"\"Raised when a configuration file cannot be loaded, for instance\n", "issue": "Add official support for Python 3.12\n## Description\r\n<!-- Is your feature request related to a problem? A clear and concise description of what the problem is: \"I'm always frustrated when ...\" -->\r\nKedro itself probably works on Python 3.12 already, it would be nice to declare official support.\r\n\r\nHowever, installing Kedro is one thing, but installing the typical dependencies might not be straightforward. For example, I just tested the spaceflights starter and most of the dependencies have already published precompiled wheels for Python 3.12 (at least for M1 Mac), but two of them are still problematic as of today:\r\n\r\n- aiohttp https://github.com/aio-libs/aiohttp/issues/7739 worked by installing the beta version as advised there, so it will be solved soon (edit: fixed \u2714\ufe0f)\r\n- pyzmq https://github.com/zeromq/pyzmq/issues/1907 (M1 specific), didn't work after installing the ZMQ header libraries with mamba (edit: fixed \u2714\ufe0f)\r\n\r\n## Context\r\n<!-- Why is this change important to you? How would you use it? How can it benefit other users? -->\r\n#2815 was already completed, but officially Kedro does not support Python 3.12 yet.\r\n\r\nYou can use Kedro on Python 3.12 by manually disabling the warning.\r\n\r\n## Possible Implementation\r\n<!-- (Optional) Suggest an idea for implementing the addition or change. -->\r\nWait a bit until at least the spaceflights starter can be safely installed in most mainstream platforms.\r\n\r\n## Possible Alternatives\r\n<!-- (Optional) Describe any alternative solutions or features you've considered. -->\r\nDeclare Python 3.12 support already, at the cost of creating some grievance of users that then proceed to install some dependencies.\r\n\n", "before_files": [{"content": "\"\"\"Kedro is a framework that makes it easy to build robust and scalable\ndata pipelines by providing uniform project templates, data abstraction,\nconfiguration and pipeline assembly.\n\"\"\"\n\nimport sys\nimport warnings\n\n__version__ = \"0.19.3\"\n\n\nclass KedroDeprecationWarning(DeprecationWarning):\n    \"\"\"Custom class for warnings about deprecated Kedro features.\"\"\"\n\n\nclass KedroPythonVersionWarning(UserWarning):\n    \"\"\"Custom class for warnings about incompatibilities with Python versions.\"\"\"\n\n\nif not sys.warnoptions:\n    warnings.simplefilter(\"default\", KedroDeprecationWarning)\n    warnings.simplefilter(\"error\", KedroPythonVersionWarning)\n\nif sys.version_info >= (3, 12):\n    warnings.warn(\n        \"\"\"Kedro is not yet fully compatible with this Python version.\nTo proceed at your own risk and ignore this warning,\nrun Kedro with `python -W \"default:Kedro is not yet fully compatible\" -m kedro ...`\nor set the PYTHONWARNINGS environment variable accordingly.\"\"\",\n        KedroPythonVersionWarning,\n    )\n", "path": "kedro/__init__.py"}, {"content": "\"\"\"This module provides ``kedro.abstract_config`` with the baseline\nclass model for a `ConfigLoader` implementation.\n\"\"\"\nfrom __future__ import annotations\n\nfrom collections import UserDict\nfrom typing import Any\n\n\nclass AbstractConfigLoader(UserDict):\n    \"\"\"``AbstractConfigLoader`` is the abstract base class\n        for all `ConfigLoader` implementations.\n    All user-defined `ConfigLoader` implementations should inherit\n        from `AbstractConfigLoader` and implement all relevant abstract methods.\n    \"\"\"\n\n    def __init__(\n        self,\n        conf_source: str,\n        env: str | None = None,\n        runtime_params: dict[str, Any] | None = None,\n        **kwargs: Any,\n    ):\n        super().__init__()\n        self.conf_source = conf_source\n        self.env = env\n        self.runtime_params = runtime_params or {}\n\n\nclass BadConfigException(Exception):\n    \"\"\"Raised when a configuration file cannot be loaded, for instance\n    due to wrong syntax or poor formatting.\n    \"\"\"\n\n    pass\n\n\nclass MissingConfigException(Exception):\n    \"\"\"Raised when no configuration files can be found within a config path\"\"\"\n\n    pass\n", "path": "kedro/config/abstract_config.py"}], "after_files": [{"content": "\"\"\"Kedro is a framework that makes it easy to build robust and scalable\ndata pipelines by providing uniform project templates, data abstraction,\nconfiguration and pipeline assembly.\n\"\"\"\n\nimport sys\nimport warnings\n\n__version__ = \"0.19.3\"\n\n\nclass KedroDeprecationWarning(DeprecationWarning):\n    \"\"\"Custom class for warnings about deprecated Kedro features.\"\"\"\n\n\nclass KedroPythonVersionWarning(UserWarning):\n    \"\"\"Custom class for warnings about incompatibilities with Python versions.\"\"\"\n\n\nif not sys.warnoptions:\n    warnings.simplefilter(\"default\", KedroDeprecationWarning)\n    warnings.simplefilter(\"error\", KedroPythonVersionWarning)\n\nif sys.version_info >= (3, 13):\n    warnings.warn(\n        \"\"\"Kedro is not yet fully compatible with this Python version.\nTo proceed at your own risk and ignore this warning,\nrun Kedro with `python -W \"default:Kedro is not yet fully compatible\" -m kedro ...`\nor set the PYTHONWARNINGS environment variable accordingly.\"\"\",\n        KedroPythonVersionWarning,\n    )\n", "path": "kedro/__init__.py"}, {"content": "\"\"\"This module provides ``kedro.abstract_config`` with the baseline\nclass model for a `ConfigLoader` implementation.\n\"\"\"\nfrom __future__ import annotations\n\nfrom collections import UserDict\nfrom typing import Any\n\n\nclass AbstractConfigLoader(UserDict):\n    \"\"\"``AbstractConfigLoader`` is the abstract base class\n        for all `ConfigLoader` implementations.\n    All user-defined `ConfigLoader` implementations should inherit\n        from `AbstractConfigLoader` and implement all relevant abstract methods.\n    \"\"\"\n\n    def __init__(\n        self,\n        conf_source: str,\n        env: str | None = None,\n        runtime_params: dict[str, Any] | None = None,\n        **kwargs: Any,\n    ):\n        super().__init__()\n        self.conf_source = conf_source\n        self.env = env\n        self.runtime_params = runtime_params or {}\n\n    # As of Python 3.12 __getitem__ is no longer called in the inherited UserDict.get()\n    # This causes AbstractConfigLoader.get() to break\n    # See: https://github.com/python/cpython/issues/105524\n    # Overwrite the inherited get function with the implementation from 3.11 and prior\n    def get(self, key: str, default: Any = None) -> Any:\n        \"D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.\"\n        try:\n            return self[key]\n        except KeyError:\n            return default\n\n\nclass BadConfigException(Exception):\n    \"\"\"Raised when a configuration file cannot be loaded, for instance\n    due to wrong syntax or poor formatting.\n    \"\"\"\n\n    pass\n\n\nclass MissingConfigException(Exception):\n    \"\"\"Raised when no configuration files can be found within a config path\"\"\"\n\n    pass\n", "path": "kedro/config/abstract_config.py"}]}