Python code-generator should use isoparse instead of parse for datetime fields #11279
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR checklist
./bin/to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.shand./bin/security/{LANG}-petstore.shif updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\.3.0.0branch for changes related to OpenAPI spec 3.0. Default:master.Description of the PR
Currently, the python-generated client will deserialize a datetime field
by using dateutil.parser.parse. This is a less-strict parser, allowing
it to support more than just ISO-8601 formats, but also has some weird
behavior of setting the timezone to tzlocal instead of tzutc on machines
that have utc as their timezone (only occasionally though).
dateutil.parser.isoparse is a faster and stricter ISO-8601 parser, and
the swagger spec for date-time fields indicates that it should follow
ISO-8601. Therefore, to remove the possibility of tzutc being
interpreted as tzlocal (which can be confusing and unexpected), we
should use isoparse.
This change modifies the mustache template for python code-gen to use
isoparse instead of parse. The result is the generated python code will
correctly report timezones as tzutc on machines that used to report
tzlocal. It also runs almost an order of magnitude faster!
Everything continues to build correctly, and the code runs correctly
for our systems. Ran bin/python-petstore.sh and
bin/security/python-petstore.sh (these added some changes not related
to my code).
Issue Ref: #11278