The _client_handlers dictionary allowed modifications during iteration
without proper concurrency control. I added some reentrant locks to manage
concurrent access to the _global_handlers and _client_handlers data
structures.
See #326
Signed-off-by: Federico Bond <federicobond@gmail.com>
* test: make sure provider is registered in events test
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: bind providers explicitly to a registry with attach/detach
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: move registry singleton to the registry module
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: make openfeature.provider.registry a private module
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: update provider status when provider emits events
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: avoid duplicate code
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: fix provider event dispatch on initialize/shutdown
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: rename default_registry to provider_registry
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: implement provider events
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: add error_code field to EventDetails and ProviderEventDetails
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: replace strings with postponed evaluation of annotations
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: run handlers immediately if provider already in associated state
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: remove unused _provider from openfeature.api
Signed-off-by: Federico Bond <federicobond@gmail.com>
* test: add some comments to test cases
Signed-off-by: Federico Bond <federicobond@gmail.com>
* test: add provider event late binding test cases
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: fix status handlers running immediately if provider already in associated state
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: reuse provider property in OpenFeatureClient
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: move _provider_status_to_event to ProviderEvent.from_provider_status
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: move EventSupport class to an internal module
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: replace EventSupport class with module-level functions
Signed-off-by: Federico Bond <federicobond@gmail.com>
* style: fix code style
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: run error hooks if provider returns FlagResolutionDetails with non-empty error_code
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: extract error code to exception mapping to class variable
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: implement provider status
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: set provider status to fatal if initialize raises PROVIDER_FATAL error
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: add a provider status accessor to clients
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: short circuit flag resolution when provider is not ready
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: add support for domains
Signed-off-by: Federico Bond <federicobond@gmail.com>
* docs: update README.md
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: add clear_providers function to api
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: make _get_provider function private
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: shutdown all providers on api.shutdown
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: move provider dict to a ProviderRegistry class
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: reset default provider on clear_providers and add tests
Signed-off-by: Federico Bond <federicobond@gmail.com>
* docs: update README.md
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: Hook methods should have default non-abstract implementations
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: use correct return type for Hook.before method
Signed-off-by: Federico Bond <federicobond@gmail.com>
* feat: make EvaluationContext a dataclass
Signed-off-by: Federico Bond <federicobond@gmail.com>
* test: add unit test for evaluation context merging in before_hooks
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
* refactor!: simplify namespaces to make public API more pythonic
Signed-off-by: Federico Bond <federicobond@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
* refactor!: move api hooks methods to api module
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor!: rename api-level hook methods
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: move api evaluation_context methods to api module
Signed-off-by: Federico Bond <federicobond@gmail.com>
* refactor: rename api_evaluation_context and set_api_evaluation_context
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
* test: add implementation of evaluation e2e tests
Signed-off-by: Federico Bond <federicobond@gmail.com>
Signed-off-by: James Carr <james.r.carr@gmail.com>
* chore: run behave tests in GH workflow
Signed-off-by: Federico Bond <federicobond@gmail.com>
* fix: replace typing.Union value used in isinstance for compatibility with python<3.10
Signed-off-by: Federico Bond <federicobond@gmail.com>
* chore: automatically pull submodule for e2e make target
Signed-off-by: Federico Bond <federicobond@gmail.com>
---------
Signed-off-by: Federico Bond <federicobond@gmail.com>
Signed-off-by: James Carr <james.r.carr@gmail.com>
Co-authored-by: Federico Bond <federicobond@gmail.com>
* feat: defaults to NoOpProvider
ensures a provider will always be returned
Signed-off-by: Tom Carrio <tom@carrio.dev>
* test: update for default provider being safe with default
Signed-off-by: Tom Carrio <tom@carrio.dev>
* chore: fix misspelling in test case
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Signed-off-by: Tom Carrio <tom@carrio.dev>
Signed-off-by: Tom Carrio <tom@carrio.dev>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Signed-off-by: Tom Carrio <tom@carrio.dev>
Co-authored-by: Meg McRoberts <mmcroberts@cloudbees.com>
Co-authored-by: Matthew Elwell <mjelwell89@gmail.com>
* Fix type checking within client
Signed-off-by: Manuel Schönlaub <manuel.schoenlaub@gmail.com>
* Make linter happy
Signed-off-by: Manuel Schönlaub <manuel.schoenlaub@gmail.com>
* Migrate Hook Hints to Mapping
Signed-off-by: Manuel Schönlaub <manuel.schoenlaub@gmail.com>
* Fix type annotations in FlagEvaluationDetails
Signed-off-by: Manuel Schönlaub <manuel.schoenlaub@gmail.com>
* Fix last hint typing
Signed-off-by: Manuel Schönlaub <manuel.schonlaub@prodigygame.com>
* Rework typing
Signed-off-by: Manuel Schönlaub <manuel.schonlaub@prodigygame.com>
Signed-off-by: Manuel Schönlaub <manuel.schoenlaub@gmail.com>
Signed-off-by: Manuel Schönlaub <manuel.schonlaub@prodigygame.com>
* feature/spec-0.3.0: Update docs on merging contexts to reflect spec
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.5.0: Ensure error message is optional and error code required when an error has been found
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.5.0: Remove returns in exception docstrings
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Add float and int flag methods
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Add the ability for a provider to have hooks
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Flag evaluation options added for hook merging
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Move numeric type methods to a private method within the client
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Add tests for new numeric methods
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Overwrite init on FlagEvaluationOptions
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Overwrite init on FlagEvaluationOptions
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Remove init on FlagEvaluationOptions
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Ensure before_hooks are evaluated in the opposite order
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Remove number flag evaluation in favour of strongly typed counterparts
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Check flag type after provider response
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Remove unnecessary static method
Signed-off-by: Matthew Elwell <matthew.elwell@flagsmith.com>
* feature/spec-0.2.0: Update docstring parameter name
Signed-off-by: Matthew Elwell <matthew.elwell@flagsmith.com>
* feature/spec-0.2.0: Fix typing of int and float methods
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/spec-0.2.0: Change provider methods to resolves rather than gets
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Co-authored-by: Matthew Elwell <matthew.elwell@flagsmith.com>
* fix/unit-tests: Improve unit test coverage to ensure spec is followed
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Add test coverage around hooks
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Parametrize test_should_use_no_op_provider_if_none_provided
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Parametrize all flag type methods in open feature client
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Parametrize all flag type methods in open feature client
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Add fixture to clear global provider after each tests
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Mock hooks in tests
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Update docstring on clear_provider method
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: remove setup method in client tests
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* fix/unit-tests: Remove invalid flag type check in private method _create_provider_evaluation and move to public method
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* provider-metadata: Add metadata to providers
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/provider-metadata: Test extending metadata class
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
* feature/provider-metadata: Change no op metadata
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>