kubernetes-client / python-base

Apache License 2.0
70 stars 185 forks source link

Make duck-typing checking in `serialize_body` method more restrictive #241

Closed piglei closed 3 years ago

piglei commented 3 years ago

Thebody parameter in DynamicClient's most methods currently accepts both dict type and ResourceInstance type. This was achieved by calling serialize_body() before mading any requests.

But in current implementation, the duck-typing style checking in serialize_body was kind of meaning-less---ResourceInstance type has overwritten it's __getattr__ method, so basically it's instances can pass every hasattr(...) check.

>>> inst = ResourceInstance(None, {'kind': 'Pod'})
>>> hasattr(inst, 'to_dict')
True
>>> hasattr(inst, 'to_dict_whatever_name')
True

This PR makes the checking in serialize_body() method more restrictive and also add some related unit tests.

Release Note:

Type checking in `Client.serialize_body()` was made more restrictive and robust.
k8s-ci-robot commented 3 years ago

Welcome @piglei!

It looks like this is your first PR to kubernetes-client/python-base 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-client/python-base has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. :smiley:

roycaihw commented 3 years ago

/assign @yliaog

yliaog commented 3 years ago

/lgtm

/assign @fabianvf

yliaog commented 3 years ago

/approve

piglei commented 3 years ago

/lgtm, needs rebase though

Rebased with upstream/master.

piglei commented 3 years ago

PR refreshed.

k8s-ci-robot commented 3 years ago

Thanks for your pull request. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

:memo: Please follow instructions at https://git.k8s.io/community/CLA.md#the-contributor-license-agreement to sign the CLA.

It may take a couple minutes for the CLA signature to be fully registered; after that, please reply here with a new comment and we'll verify. Thanks.


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
yliaog commented 3 years ago

please squash the commits

piglei commented 3 years ago

please squash the commits

Done

yliaog commented 3 years ago

/lgtm /approve

k8s-ci-robot commented 3 years ago

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: fabianvf, piglei, yliaog

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files: - ~~[OWNERS](https://github.com/kubernetes-client/python-base/blob/master/OWNERS)~~ [yliaog] Approvers can indicate their approval by writing `/approve` in a comment Approvers can cancel approval by writing `/approve cancel` in a comment
fabianvf commented 3 years ago

@piglei just needs the release note and it should be good to go

piglei commented 3 years ago

@piglei just needs the release note and it should be good to go

Thanks for reminding me, the release note was now added.