From d27282b5c76c6d4f99d82de439d6c52dfd219faf Mon Sep 17 00:00:00 2001
From: Stephen Finucane <stephenfin@redhat.com>
Date: Tue, 27 Aug 2024 10:29:51 +0100
Subject: [PATCH] Fix Python 3.12 compatibility

Handle a change in Python 3.12 [1].

[1] https://github.com/python/cpython/commit/cffb4c78d3b2a8a724301e59fb39b73b20e544de

Change-Id: I772579d297ef51c57019218a4ca8a566987b9b5c
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
---
 novaclient/shell.py | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/novaclient/shell.py b/novaclient/shell.py
index adb8b4dcb..49cba94f0 100644
--- a/novaclient/shell.py
+++ b/novaclient/shell.py
@@ -232,8 +232,11 @@ class NovaClientArgumentParser(argparse.ArgumentParser):
         option_tuples = (super(NovaClientArgumentParser, self)
                          ._get_option_tuples(option_string))
         if len(option_tuples) > 1:
-            normalizeds = [option.replace('_', '-')
-                           for action, option, value in option_tuples]
+            # In Python < 3.12, this is a 3-part tuple:
+            #   action, option_string, explicit_arg
+            # In Python >= 3.12, this is a 4 part tuple:
+            #   action, option_string, sep, explicit_arg
+            normalizeds = [opt[1].replace('_', '-') for opt in option_tuples]
             if len(set(normalizeds)) == 1:
                 return option_tuples[:1]
         return option_tuples