Fix unbound method call for JSONEncoder (#17970)
* Fix unbound method call for JSONEncoder
The way it is currently it will lead to unbound method error
```python
In [1]: import json
In [2]: json.JSONEncoder.default('object_here')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-872fdacfda50> in <module>()
----> 1 json.JSONEncoder.default('object_here')
TypeError: unbound method default() must be called with JSONEncoder instance as first argument (got str instance instead)
```
But what is really wanted is to let the json module to raise the "is not serializable error" which demands a bounded instance of `JSONEncoder()`
```python
In [3]: json.JSONEncoder().default('object_here')
---------------------------------------------------------------------------
TypeError: 'object_here' is not JSON serializable
```
BTW: I think it would try to call `.to_json` of object before raising as it is a common pattern.
* Calling JSONEncoder bounded `default` method using super()
(cherry picked from commit b06fb2022c
)
This commit is contained in:
parent
972379c907
commit
3e58f08155
1 changed files with 1 additions and 1 deletions
|
@ -68,7 +68,7 @@ class AnsibleJSONEncoder(json.JSONEncoder):
|
|||
if isinstance(o, HostVars):
|
||||
return dict(o)
|
||||
else:
|
||||
return json.JSONEncoder.default(o)
|
||||
return super(AnsibleJSONEncoder, self).default(o)
|
||||
|
||||
def to_yaml(a, *args, **kw):
|
||||
'''Make verbose, human readable yaml'''
|
||||
|
|
Loading…
Reference in a new issue