Skip to content

feat(generator): delegate REST transcoding to google-api-core#17766

Draft
hebaalazzeh wants to merge 2 commits into
mainfrom
feat/gapic-generator-centralization-transcoding
Draft

feat(generator): delegate REST transcoding to google-api-core#17766
hebaalazzeh wants to merge 2 commits into
mainfrom
feat/gapic-generator-centralization-transcoding

Conversation

@hebaalazzeh

Copy link
Copy Markdown
Contributor

this PR refactors generator templates to delegate REST transcoding to the centralized helper in google-api-core.

Scope of Changes:

  • _shared_macros.j2: Replaced inline static helper invocation with gapic_v1.rest_transcoding.transcode().
  • rest_base.py.j2: Stripped the redundant _get_transcoded_request, _get_request_body_json, and _get_query_params_json helper functions.
  • _rest_mixins_base.py.j2: Stripped the redundant static helpers from API REST mixins base.
  • rest.py.j2 & rest_asyncio.py.j2: Passed the configuration flags (like opts.rest_numeric_enums) into the transcoding macro.
  • noxfile.py: Configured local packages/google-api-core to be installed during virtualenv test generation so the new transcoding runtime module is available.

related PR: #17765

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors REST transcoding in the GAPIC generator by centralizing the transcoding logic into a new transcode function within google-api-core (gapic_v1.rest_transcoding). This change eliminates redundant static helper methods (_get_transcoded_request, _get_request_body_json, and _get_query_params_json) from the generated transport templates. Additionally, the PR updates test configurations and introduces comprehensive unit tests for the new transcoding utility. The feedback suggests optimizing the transcode function by using json_format.MessageToDict directly instead of the inefficient round-trip serialization of json.loads(json_format.MessageToJson(...)).

Comment on lines +58 to +63
query_params_json = json.loads(
json_format.MessageToJson(
transcoded_request["query_params"],
use_integers_for_enums=rest_numeric_enums,
)
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Using json.loads(json_format.MessageToJson(...)) to convert a protobuf message to a dictionary introduces unnecessary serialization and deserialization overhead. We can use json_format.MessageToDict directly, which is much more efficient and cleaner.

        query_params_json = json_format.MessageToDict(
            transcoded_request["query_params"],
            use_integers_for_enums=rest_numeric_enums,
        )

@hebaalazzeh
hebaalazzeh force-pushed the feat/gapic-generator-centralization-transcoding branch 2 times, most recently from 93fcb6d to b9bb9f0 Compare July 18, 2026 00:27
@hebaalazzeh
hebaalazzeh force-pushed the feat/gapic-generator-centralization-transcoding branch from b9bb9f0 to a8a1968 Compare July 18, 2026 06:02
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