From 4681c7eff96f2927dd8cce7e89ed673f38904ee9 Mon Sep 17 00:00:00 2001
From: Rabi Mishra <ramishra@redhat.com>
Date: Thu, 15 Nov 2018 16:57:22 +0530
Subject: [PATCH] Fix formatter handling for python 3.7
Calling issubclass() on a python function fails in Python 3.7.
Change-Id: Id2abfaad6ed96532157b9bc7b2124e6f6ad37511
Story: #2003322
Task: 27942
---
osc_lib/utils/__init__.py | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/osc_lib/utils/__init__.py b/osc_lib/utils/__init__.py
index d640ca8..f3573c7 100644
--- a/osc_lib/utils/__init__.py
+++ b/osc_lib/utils/__init__.py
@@ -430,9 +430,10 @@ def get_dict_properties(item, fields, mixed_case_fields=None, formatters=None):
data = item[field_name] if field_name in item else ''
if field in formatters:
formatter = formatters[field]
- if issubclass(formatter, cliff_columns.FormattableColumn):
+ if (isinstance(formatter, type) and issubclass(
+ formatter, cliff_columns.FormattableColumn)):
data = formatter(data)
- else:
+ elif callable(formatter):
warnings.warn(
'The usage of formatter functions is now discouraged. '
'Consider using cliff.columns.FormattableColumn instead. '
@@ -440,6 +441,10 @@ def get_dict_properties(item, fields, mixed_case_fields=None, formatters=None):
category=DeprecationWarning)
if data is not None:
data = formatter(data)
+ else:
+ msg = "Invalid formatter provided."
+ raise exceptions.CommandError(msg)
+
row.append(data)
return tuple(row)
@@ -492,9 +497,10 @@ def get_item_properties(item, fields, mixed_case_fields=None, formatters=None):
data = getattr(item, field_name, '')
if field in formatters:
formatter = formatters[field]
- if issubclass(formatter, cliff_columns.FormattableColumn):
+ if (isinstance(formatter, type) and issubclass(
+ formatter, cliff_columns.FormattableColumn)):
data = formatter(data)
- else:
+ elif callable(formatter):
warnings.warn(
'The usage of formatter functions is now discouraged. '
'Consider using cliff.columns.FormattableColumn instead. '
@@ -502,6 +508,10 @@ def get_item_properties(item, fields, mixed_case_fields=None, formatters=None):
category=DeprecationWarning)
if data is not None:
data = formatter(data)
+ else:
+ msg = "Invalid formatter provided."
+ raise exceptions.CommandError(msg)
+
row.append(data)
return tuple(row)
--
2.20.1