Skip to content

Conversation

@jblacker
Copy link
Contributor

@jblacker jblacker commented Aug 26, 2025

This PR

completes the non-breaking changes of #414 in preparation of v2.

  • Adds GetClient & GetNamedClient functions directly to the openfeature package using the api instance
  • Mark GetApiInstance function as deprecated

Related Issues

Notes

  • This only handles the non-breaking changes as the actual removal of the function

Follow-up Tasks

Follow up with breaking changes by removing the GetApiInstance function and no longer exporting IEvaluation

@jblacker jblacker requested review from a team as code owners August 26, 2025 21:48
Copy link
Contributor

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

Choose a reason for hiding this comment

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

Summary of Changes

Hello @jblacker, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant API simplification by deprecating the GetApiInstance function and providing direct access to client instances through new GetClient and GetNamedClient functions at the top level of the openfeature package. This change streamlines client retrieval, making the API more intuitive and preparing the codebase for future breaking changes in v2. All internal usage has been updated to reflect this new pattern, ensuring a smooth transition for consumers.

Highlights

  • API Deprecation: The GetApiInstance function within the openfeature package has been explicitly marked as deprecated, signaling its eventual removal in future versions.
  • New Client Access Functions: Two new top-level functions, GetClient() and GetNamedClient(domain string), have been introduced directly into the openfeature package. These functions provide a more direct and streamlined way to obtain OpenFeature client instances without needing to first retrieve the API singleton.
  • Codebase Migration: All existing internal and test code that previously relied on GetApiInstance().GetClient() or GetApiInstance().GetNamedClient() has been updated to use the newly introduced direct openfeature.GetClient() or openfeature.GetNamedClient() calls, ensuring consistency and adherence to the new API pattern.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@codecov
Copy link

codecov bot commented Aug 26, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.57%. Comparing base (3d2b707) to head (68f2ad9).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #421      +/-   ##
==========================================
- Coverage   85.69%   85.57%   -0.12%     
==========================================
  Files          20       20              
  Lines        1433     1435       +2     
==========================================
  Hits         1228     1228              
- Misses        184      186       +2     
  Partials       21       21              
Flag Coverage Δ
e2e 85.57% <100.00%> (-0.12%) ⬇️
unit 85.57% <100.00%> (-0.12%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

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

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 effectively deprecates GetApiInstance and introduces GetClient and GetNamedClient as more direct alternatives. The changes are consistently applied throughout the codebase, including in tests. The new functions are well-documented and the deprecation is clearly marked. I have one minor suggestion to improve the comment for the deprecated function to avoid confusion.

@jblacker jblacker changed the title Deprecate GetApiInstance & Add Direct GetClient & GetNamedClient implementations refactor: Deprecate GetApiInstance & Add Direct GetClient & GetNamedClient implementations Aug 26, 2025
jblacker and others added 2 commits August 26, 2025 17:56
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Jordan Blacker <[email protected]>
@erka
Copy link
Member

erka commented Aug 26, 2025

Should we consider naming these functions NewClient and NewNamedClient instead of GetClient and GetNamedClient? Since they return a new object each time, the New* prefix might better explain it.

@jblacker
Copy link
Contributor Author

There is already a function NewClient in the openfeature package. That would be a breaking change if we want to go that route.

@erka
Copy link
Member

erka commented Aug 27, 2025

GetNamedClient is equivalent to NewClient, and GetClient is just NewClient(""). Is there a specific reason to introduce these additional functions?

@beeme1mr beeme1mr requested review from erka and sahidvelji August 27, 2025 19:16
@jblacker
Copy link
Contributor Author

jblacker commented Aug 27, 2025

After checking that out a bit more I agree with you. I'll eliminate GetNamedClient as it's unnecessary. I'll update the docs as well to show NewClient should be preferred.

Since GetApiInstance().GetClient() is a common pattern how about we add a NewDefaultClient() as the new equivalent that just passes in the empty string for simplicity?

This has been replaced by the existing NewClient method

Signed-off-by: Jordan Blacker <[email protected]>
Also updated the implementation to match how api.GetClient() did it.
This means we can most likely also deprecate IEvalualation's GetClient() & GetNamedClient()

Signed-off-by: Jordan Blacker <[email protected]>
Signed-off-by: Jordan Blacker <[email protected]>
@jblacker jblacker force-pushed the remove-get-api-instance branch from ec7c97f to 763ee05 Compare August 27, 2025 22:51
@jblacker
Copy link
Contributor Author

With these changes we could also deprecate GetClient & GetNamedClient on IEvaluation since the implementations are identical and all just call the same private function under the hood. What do ya'll think?

@erka
Copy link
Member

erka commented Aug 27, 2025

With these changes we could also deprecate GetClient & GetNamedClient on IEvaluation since the implementations are identical and all just call the same private function under the hood. What do ya'll think?

That’s a great question, but I think it would be best to address it separately.

@erka
Copy link
Member

erka commented Aug 27, 2025

@jblacker please update the PR title to better reflect the changes.

@jblacker jblacker changed the title refactor: Deprecate GetApiInstance & Add Direct GetClient & GetNamedClient implementations refactor: Deprecate GetApiInstance & Add Direct NewDefaultClient implementations Aug 27, 2025
@jblacker jblacker requested a review from sahidvelji September 8, 2025 18:17
@erka erka mentioned this pull request Sep 24, 2025
@beeme1mr beeme1mr merged commit 9c5d833 into open-feature:main Sep 24, 2025
5 of 6 checks passed
@jblacker jblacker deleted the remove-get-api-instance branch September 27, 2025 14:54
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.

Remove the GetApiInstance function [DOC] inconsistent documentation for usage of openfeature.NewClient

4 participants