diff --git a/kubernetes_asyncio/client/api_client.py b/kubernetes_asyncio/client/api_client.py index 9353ecc0..28bae63e 100644 --- a/kubernetes_asyncio/client/api_client.py +++ b/kubernetes_asyncio/client/api_client.py @@ -540,7 +540,7 @@ def select_header_content_type(self, content_types, method=None, body=None): isinstance(body, list)): return 'application/json-patch+json' if ('application/strategic-merge-patch+json' in content_types and - isinstance(body, dict)): + (isinstance(body, dict) or hasattr(body, "to_dict"))): return 'application/strategic-merge-patch+json' if 'application/json' in content_types or '*/*' in content_types: diff --git a/kubernetes_asyncio/e2e_test/test_apply_patch.py b/kubernetes_asyncio/e2e_test/test_apply_patch.py index 2c9deac3..bf8bfc43 100644 --- a/kubernetes_asyncio/e2e_test/test_apply_patch.py +++ b/kubernetes_asyncio/e2e_test/test_apply_patch.py @@ -50,8 +50,18 @@ async def test_apply_patch(self): ) self.assertEqual(name, resp.metadata.name) - resp = await api.read_namespaced_config_map(name=name, namespace="default") - self.assertEqual(name, resp.metadata.name) + cm = await api.read_namespaced_config_map(name=name, namespace="default") + self.assertEqual(name, cm.metadata.name) + + # strategic merge patch for object + cm.data["new"] = "value" + resp = await api.patch_namespaced_config_map( + field_manager="test", + body=cm, + name=name, + namespace="default", + ) + self.assertEqual(resp.data, {'hello': 'world!', 'new': 'value'}) resp = await api.delete_namespaced_config_map( name=name, body={}, namespace="default" diff --git a/scripts/api_client_strategic_merge_patch.diff b/scripts/api_client_strategic_merge_patch.diff index 31d724ce..f286b88d 100644 --- a/scripts/api_client_strategic_merge_patch.diff +++ b/scripts/api_client_strategic_merge_patch.diff @@ -13,7 +13,7 @@ + isinstance(body, list)): + return 'application/json-patch+json' + if ('application/strategic-merge-patch+json' in content_types and -+ isinstance(body, dict)): ++ (isinstance(body, dict) or hasattr(body, "to_dict"))): + return 'application/strategic-merge-patch+json' if 'application/json' in content_types or '*/*' in content_types: