Skip to content

Conversation

@NiharS
Copy link

@NiharS NiharS commented Dec 1, 2021

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh and ./bin/security/{LANG}-petstore.sh if 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\.
  • Filed the PR against the correct branch: 3.0.0 branch for changes related to OpenAPI spec 3.0. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language. @kenjones-cisco (sorry if out-of-date)

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

Nihar Sheth added 2 commits December 1, 2021 15:18
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!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant