From 1ec13aaba2d0b9c703a2564ec588e4d6de92697b Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Tue, 21 Jan 2020 17:31:11 +0100 Subject: [PATCH] Fix 'None' field value processing Change [1] introduced a conditional call to Field's "adapter" callable supposedly to work-around some OEM issues. Sadly, the exact problem that change [1] has been trying to solve was never explained and remains murky. However, fix [1] has also introduced a bug which makes sushy ignoring 'None' literals in the values. This sometimes leads to sushy failing to operate on perfectly valid JSON documents. This change removes most of the conditions guarding Field's "adapter" function calls. 1. https://review.opendev.org/#/c/669963/6 Change-Id: I8d1e1691a0bb2b6315894c85569a73633d34c1cb --- sushy/resources/base.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/sushy/resources/base.py b/sushy/resources/base.py index 1cda9519..02a8c019 100644 --- a/sushy/resources/base.py +++ b/sushy/resources/base.py @@ -101,16 +101,12 @@ class Field(object): # Do not run the adapter on the default value return self._default - try: - # Get the value based on the name, defaulting to an empty dict - # Check to ensure that value is implemented by OEM - # TODO(etingof): we should revisit this logic/code - if (item is not None and item != {} and - str(item).lower() != 'none'): - value = self._adapter(item) + # NOTE(etingof): this is just to account for schema violation + if item is None: + return - else: - value = item + try: + return self._adapter(item) except (UnicodeError, ValueError, TypeError) as exc: path = (nested_in or []) + self._path @@ -119,8 +115,6 @@ class Field(object): resource=resource.path, error=exc) - return value - def _collect_fields(resource): """Collect fields from the JSON.