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 }})
- fixed openapi schema yaml rendering for timedelta
- yaml default scalar convert timedelta into python tag !!python/object/apply:datetime.timedelta which is cant be rendered into swagger and redoc.
- added custom scalar which convert python tag into str
Rizwan Shaikh added 5 commits
rnshaikh changed the title
Fix OpenAPI Schema yaml rendering for timedelta #8063 Fix OpenAPI Schema yaml rendering for timedelta
@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.
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.
Added Deprecation Warnings for CoreAPI
Bumped removal to DRF315
Update rest_framework/init.py
Update rest_framework/filters.py
Update rest_framework/filters.py
Update tests/schemas/test_coreapi.py
Update rest_framework/filters.py
Update rest_framework/filters.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update rest_framework/pagination.py
Update rest_framework/pagination.py
Update rest_framework/pagination.py
Update rest_framework/pagination.py
Update rest_framework/schemas/coreapi.py
Update rest_framework/schemas/coreapi.py
Update rest_framework/schemas/coreapi.py
Update rest_framework/schemas/coreapi.py
Update rest_framework/schemas/coreapi.py
Update tests/schemas/test_coreapi.py
Update setup.cfg
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update tests/schemas/test_coreapi.py
Update rest_framework/pagination.py
Co-authored-by: Asif Saif Uddin auvipy@gmail.com
…es (encode#7278)
Fix the case where if the namespace is not None and there's no match, NamespaceVersioning always raises NotFound even if DEFAULT_VERSION is set or None is in ALLOWED_VERSIONS
Add test cases
Rizwan Shaikh added 4 commits
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.