kubernetes-client / kubernetes-client/python

Convert JSON or Dict to client objects

Open
#977 64 comments 13 reactions 1 assignee Claimed by @roycaihw View on GitHub
kind/feature lifecycle/stale
Dominant language
Python
Stars
7.7k
Forks
3.5k
Avg merge
1d 14h
Merged PRs (30d)
18

Description

See also https://github.com/kubernetes-client/python/issues/340#issuecomment-526249075 (was closed for inactivity, NOT resolved)
See also #63

**Motivation**
It is sometimes useful to be able to load Python objects from JSON, for example to read it from a config file. It should be possible to get Python objects from JSON, to pass around the code in a type-safe manner, for modification and ultimately sending through the client.

**Feature request**
*There should be functions to convert JSON to objects and objects to JSON. This code already exists (it's required to talk to the API server), it should be exposed.*

**Workaround?**
Right now, you can put this raw JSON into Python objects' fields, and the API client will apparently accept this, however if you use such mixed objects your code will probably break since their attribute names are different (API uses PascalCase, Python objects use snake_case). Even if taking care to handle that, you will reach the point where you have to handle things coming from the API client (Python objects using snake_case) differently from what you load from config files (JSON using PascalCase). Really messy.

Right now I am left considering dropping this lib altogether and issuing requests directly, since the point of the wrapper is to expose safe typed Python classes instead of the raw JSON, but this doesn't work if you use any kind of config file.

**Current status**
It is somewhat possible to convert from a Python object to JSON using `client.api_client.sanitize_for_serialization()`, however converting from JSON to Python is completely impossible; the `deserialize()` method that exists expects a `requests.Response`, not JSON. Calling `client.api_client._ApiClient__deserialize()` works, but that is a private method, and you need to pass it the `kind` read from the JSON yourself.

Apologies for duplicating #340 but I cannot re-open it myself.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.