diff --git a/pillarsdk/resource.py b/pillarsdk/resource.py index 9d2a773..153b055 100644 --- a/pillarsdk/resource.py +++ b/pillarsdk/resource.py @@ -211,10 +211,11 @@ class Create(Resource): >>> node = Node({}) >>> node.create() """ + api = api or self.api headers = self.http_headers() - - new_attributes = api.post(self.path, self.to_dict(), headers) + attributes = utils.remove_none_attributes(self.to_dict()) + new_attributes = api.post(self.path, attributes, headers) self.error = None self.merge(new_attributes) return self.success() diff --git a/pillarsdk/utils.py b/pillarsdk/utils.py index f5418ee..8e59c52 100644 --- a/pillarsdk/utils.py +++ b/pillarsdk/utils.py @@ -57,3 +57,23 @@ def convert_datetime(item): item[k] = datetime.strptime(item[k], "%a, %d %b %Y %H:%M:%S %Z") return item + + +def remove_none_attributes(attributes): + """Return a new dict with all None values removed""" + # out = {} + # for k, v in attributes.iteritems(): + # if v is not None: + # if type(v) is dict: + # attributes[k] = remove_none_attributes(v) + # else: + # out[k] = v + # return out + + if isinstance(attributes, (list, tuple, set)): + return type(attributes)(remove_none_attributes(x) for x in attributes if x is not None) + elif isinstance(attributes, dict): + return type(attributes)((remove_none_attributes(k), remove_none_attributes(v)) + for k, v in attributes.items() if k is not None and v is not None) + else: + return attributes