Fix OpenAPI Schema yaml rendering for timedelta by rnshaikh · Pull Request #9007 · encode/django-rest-framework (original) (raw)

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation7 Commits13 Checks0 Files changed

Conversation

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})

rnshaikh

  1. fixed openapi schema yaml rendering for timedelta
  2. yaml default scalar convert timedelta into python tag !!python/object/apply:datetime.timedelta which is cant be rendered into swagger and redoc.
  3. added custom scalar which convert python tag into str

Rizwan Shaikh added 5 commits

June 12, 2023 23:56

@rnshaikh rnshaikh changed the titleFix OpenAPI Schema yaml rendering for timedelta #8063 Fix OpenAPI Schema yaml rendering for timedelta

Jun 12, 2023

auvipy

@classmethod
def represent_timedelta(cls, dumper, data):
value = str(data.total_seconds())
return dumper.represent_scalar('tag:yaml.org,2002:str', value)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are you using represent_scalar from existing code?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is actually the function of yaml Dumper class for overriding the tag for different datatypes or python object.
so this function gives custom representation for timedelta and first argument is dumper obj where we are adding this function

request = create_request('/')
schema = generator.get_schema(request=request)
ret = OpenAPIRenderer().render(schema)
assert b"openapi: " in ret

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you explain the asserts please? also it would be nice to see some additional tests if possible

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure. this test renders openapi yaml definition from an example schema which has a duration field with a default value timedelta(0) and asserts is checking for "openapi" and the duration fields default value "0.0".

I think we can add checking the" !!python/object/apply:datetime.timedelta" tag is not in response.
please let me know if you have any suggestions for cases it would be a great.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you can extra tests it would be great

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have added test case for rendering yaml with durationfield having minvalidator. Please check.

@lnagel

…#8950)

Removed the {{ field.choices|yesno:",disabled" }} block because this triggers the loading of full database table worth of objects just to determine whether the multi-select widget should be set as disabled or not.

Since this "disabled" marking feature is not present in the normal select field, then I propose to remove it also from the multi-select.

@smithdc1 @auvipy


Co-authored-by: Asif Saif Uddin auvipy@gmail.com

@auvipy

@Kostia-K

…es (encode#7278)

auvipy

Rizwan Shaikh added 4 commits

June 15, 2023 23:56

auvipy

@auvipy

accepted on the ground of a bug fix to a pending deprecation feature. until people migrate and we have several more release before we remove it, people will face less bug.