diff --git a/open_feature/__init__.py b/openfeature/__init__.py similarity index 100% rename from open_feature/__init__.py rename to openfeature/__init__.py diff --git a/open_feature/_backports/__init__.py b/openfeature/_backports/__init__.py similarity index 100% rename from open_feature/_backports/__init__.py rename to openfeature/_backports/__init__.py diff --git a/open_feature/_backports/strenum.py b/openfeature/_backports/strenum.py similarity index 100% rename from open_feature/_backports/strenum.py rename to openfeature/_backports/strenum.py diff --git a/open_feature/_internal/hook_support.py b/openfeature/_internal/hook_support.py similarity index 95% rename from open_feature/_internal/hook_support.py rename to openfeature/_internal/hook_support.py index 88a88fd2..5fc49956 100644 --- a/open_feature/_internal/hook_support.py +++ b/openfeature/_internal/hook_support.py @@ -2,9 +2,9 @@ import typing from functools import reduce -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagEvaluationDetails, FlagType -from open_feature.hook import Hook, HookContext, HookType +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagEvaluationDetails, FlagType +from openfeature.hook import Hook, HookContext, HookType def error_hooks( diff --git a/open_feature/api.py b/openfeature/api.py similarity index 78% rename from open_feature/api.py rename to openfeature/api.py index db90da37..db9e1476 100644 --- a/open_feature/api.py +++ b/openfeature/api.py @@ -1,12 +1,12 @@ import typing -from open_feature.client import OpenFeatureClient -from open_feature.evaluation_context import EvaluationContext -from open_feature.exception import GeneralError -from open_feature.hook import Hook -from open_feature.provider.metadata import Metadata -from open_feature.provider.no_op_provider import NoOpProvider -from open_feature.provider.provider import AbstractProvider +from openfeature.client import OpenFeatureClient +from openfeature.evaluation_context import EvaluationContext +from openfeature.exception import GeneralError +from openfeature.hook import Hook +from openfeature.provider.metadata import Metadata +from openfeature.provider.no_op_provider import NoOpProvider +from openfeature.provider.provider import AbstractProvider _provider: AbstractProvider = NoOpProvider() diff --git a/open_feature/client.py b/openfeature/client.py similarity index 97% rename from open_feature/client.py rename to openfeature/client.py index 6f5221c6..6275eea4 100644 --- a/open_feature/client.py +++ b/openfeature/client.py @@ -2,30 +2,30 @@ import typing from dataclasses import dataclass -from open_feature import api -from open_feature.evaluation_context import EvaluationContext -from open_feature.exception import ( +from openfeature import api +from openfeature.evaluation_context import EvaluationContext +from openfeature.exception import ( ErrorCode, GeneralError, OpenFeatureError, TypeMismatchError, ) -from open_feature.flag_evaluation import ( +from openfeature.flag_evaluation import ( FlagEvaluationDetails, FlagEvaluationOptions, FlagType, Reason, FlagResolutionDetails, ) -from open_feature.hook import Hook, HookContext -from open_feature.hook.hook_support import ( +from openfeature.hook import Hook, HookContext +from openfeature.hook.hook_support import ( after_all_hooks, after_hooks, before_hooks, error_hooks, ) -from open_feature.provider.no_op_provider import NoOpProvider -from open_feature.provider.provider import AbstractProvider +from openfeature.provider.no_op_provider import NoOpProvider +from openfeature.provider.provider import AbstractProvider GetDetailCallable = typing.Union[ typing.Callable[ diff --git a/open_feature/evaluation_context.py b/openfeature/evaluation_context.py similarity index 100% rename from open_feature/evaluation_context.py rename to openfeature/evaluation_context.py diff --git a/open_feature/exception.py b/openfeature/exception.py similarity index 100% rename from open_feature/exception.py rename to openfeature/exception.py diff --git a/open_feature/flag_evaluation.py b/openfeature/flag_evaluation.py similarity index 90% rename from open_feature/flag_evaluation.py rename to openfeature/flag_evaluation.py index a291b332..e455206c 100644 --- a/open_feature/flag_evaluation.py +++ b/openfeature/flag_evaluation.py @@ -2,11 +2,11 @@ import typing from dataclasses import dataclass, field -from open_feature._backports.strenum import StrEnum -from open_feature.exception import ErrorCode +from openfeature._backports.strenum import StrEnum +from openfeature.exception import ErrorCode if typing.TYPE_CHECKING: # resolves a circular dependency in type annotations - from open_feature.hook import Hook + from openfeature.hook import Hook class FlagType(StrEnum): diff --git a/open_feature/hook/__init__.py b/openfeature/hook/__init__.py similarity index 95% rename from open_feature/hook/__init__.py rename to openfeature/hook/__init__.py index 1287aa2a..3892597a 100644 --- a/open_feature/hook/__init__.py +++ b/openfeature/hook/__init__.py @@ -4,8 +4,8 @@ from dataclasses import dataclass from enum import Enum -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagEvaluationDetails, FlagType +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagEvaluationDetails, FlagType class HookType(Enum): diff --git a/open_feature/hook/hook_support.py b/openfeature/hook/hook_support.py similarity index 95% rename from open_feature/hook/hook_support.py rename to openfeature/hook/hook_support.py index 88a88fd2..5fc49956 100644 --- a/open_feature/hook/hook_support.py +++ b/openfeature/hook/hook_support.py @@ -2,9 +2,9 @@ import typing from functools import reduce -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagEvaluationDetails, FlagType -from open_feature.hook import Hook, HookContext, HookType +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagEvaluationDetails, FlagType +from openfeature.hook import Hook, HookContext, HookType def error_hooks( diff --git a/open_feature/immutable_dict/__init__.py b/openfeature/immutable_dict/__init__.py similarity index 100% rename from open_feature/immutable_dict/__init__.py rename to openfeature/immutable_dict/__init__.py diff --git a/open_feature/immutable_dict/mapping_proxy_type.py b/openfeature/immutable_dict/mapping_proxy_type.py similarity index 89% rename from open_feature/immutable_dict/mapping_proxy_type.py rename to openfeature/immutable_dict/mapping_proxy_type.py index 6bee4924..22c6a76c 100644 --- a/open_feature/immutable_dict/mapping_proxy_type.py +++ b/openfeature/immutable_dict/mapping_proxy_type.py @@ -8,7 +8,7 @@ class MappingProxyType(dict): When upgrading to Python 3.12, you can update all references from: - `from open_feature.immutable_dict.mapping_proxy_type import MappingProxyType` + `from openfeature.immutable_dict.mapping_proxy_type import MappingProxyType` to: `from types import MappingProxyType` diff --git a/open_feature/provider/__init__.py b/openfeature/provider/__init__.py similarity index 100% rename from open_feature/provider/__init__.py rename to openfeature/provider/__init__.py diff --git a/open_feature/provider/in_memory_provider.py b/openfeature/provider/in_memory_provider.py similarity index 90% rename from open_feature/provider/in_memory_provider.py rename to openfeature/provider/in_memory_provider.py index 02237db0..695764af 100644 --- a/open_feature/provider/in_memory_provider.py +++ b/openfeature/provider/in_memory_provider.py @@ -1,13 +1,13 @@ from dataclasses import dataclass import typing -from open_feature._backports.strenum import StrEnum -from open_feature.evaluation_context import EvaluationContext -from open_feature.exception import ErrorCode -from open_feature.flag_evaluation import FlagResolutionDetails, Reason -from open_feature.hook import Hook -from open_feature.provider.metadata import Metadata -from open_feature.provider.provider import AbstractProvider +from openfeature._backports.strenum import StrEnum +from openfeature.evaluation_context import EvaluationContext +from openfeature.exception import ErrorCode +from openfeature.flag_evaluation import FlagResolutionDetails, Reason +from openfeature.hook import Hook +from openfeature.provider.metadata import Metadata +from openfeature.provider.provider import AbstractProvider PASSED_IN_DEFAULT = "Passed in default" diff --git a/open_feature/provider/metadata.py b/openfeature/provider/metadata.py similarity index 100% rename from open_feature/provider/metadata.py rename to openfeature/provider/metadata.py diff --git a/open_feature/provider/no_op_metadata.py b/openfeature/provider/no_op_metadata.py similarity index 74% rename from open_feature/provider/no_op_metadata.py rename to openfeature/provider/no_op_metadata.py index fe799488..f8385c58 100644 --- a/open_feature/provider/no_op_metadata.py +++ b/openfeature/provider/no_op_metadata.py @@ -1,6 +1,6 @@ from dataclasses import dataclass -from open_feature.provider.metadata import Metadata +from openfeature.provider.metadata import Metadata @dataclass diff --git a/open_feature/provider/no_op_provider.py b/openfeature/provider/no_op_provider.py similarity index 85% rename from open_feature/provider/no_op_provider.py rename to openfeature/provider/no_op_provider.py index 4c5fecc3..e1a4f4a2 100644 --- a/open_feature/provider/no_op_provider.py +++ b/openfeature/provider/no_op_provider.py @@ -1,11 +1,11 @@ import typing -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagResolutionDetails, Reason -from open_feature.hook import Hook -from open_feature.provider.metadata import Metadata -from open_feature.provider.no_op_metadata import NoOpMetadata -from open_feature.provider.provider import AbstractProvider +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagResolutionDetails, Reason +from openfeature.hook import Hook +from openfeature.provider.metadata import Metadata +from openfeature.provider.no_op_metadata import NoOpMetadata +from openfeature.provider.provider import AbstractProvider PASSED_IN_DEFAULT = "Passed in default" diff --git a/open_feature/provider/provider.py b/openfeature/provider/provider.py similarity index 87% rename from open_feature/provider/provider.py rename to openfeature/provider/provider.py index ea31177d..6a59e9cf 100644 --- a/open_feature/provider/provider.py +++ b/openfeature/provider/provider.py @@ -1,10 +1,10 @@ import typing from abc import abstractmethod -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagResolutionDetails -from open_feature.hook import Hook -from open_feature.provider.metadata import Metadata +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagResolutionDetails +from openfeature.hook import Hook +from openfeature.provider.metadata import Metadata class AbstractProvider: diff --git a/readme.md b/readme.md index 779f6c08..d05e3957 100644 --- a/readme.md +++ b/readme.md @@ -66,8 +66,8 @@ pip install requirements.txt In order to use the sdk there is some minor configuration. Follow the script below: ```python -from open_feature import api -from open_feature.provider.no_op_provider import NoOpProvider +from openfeature import api +from openfeature.provider.no_op_provider import NoOpProvider api.set_provider(NoOpProvider()) open_feature_client = api.get_client() @@ -103,7 +103,7 @@ In OpenFeature, we refer to this as [`targeting`](https://openfeature.dev/specif If the flag system you're using supports targeting, you can provide the input data using the `EvaluationContext`. ```python -from open_feature.api import ( +from openfeature.api import ( get_client, get_provider, set_provider @@ -142,7 +142,7 @@ See [here](https://openfeature.dev/ecosystem) for a catalog of available provide A hook is a mechanism that allows for adding arbitrary behavior at well-defined points of the flag evaluation life-cycle. Use cases include validating the resolved flag value, modifying or adding data to the evaluation context, logging, telemetry, and tracking. ```python -from open_feature.hook import Hook +from openfeature.hook import Hook class MyHook(Hook): def after(self, hook_context: HookContext, details: FlagEvaluationDetails, hints: dict): @@ -150,7 +150,7 @@ class MyHook(Hook): # set global hooks at the API-level -from open_feature.api import add_hooks +from openfeature.api import add_hooks add_hooks([MyHook()]) # or configure them in the client diff --git a/tests/conftest.py b/tests/conftest.py index c417272c..6cc940ca 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import pytest -from open_feature import api -from open_feature.provider.no_op_provider import NoOpProvider +from openfeature import api +from openfeature.provider.no_op_provider import NoOpProvider @pytest.fixture(autouse=True) diff --git a/tests/evaluation_context/test_evaluation_context.py b/tests/evaluation_context/test_evaluation_context.py index ac3dcf60..2f8fcc69 100644 --- a/tests/evaluation_context/test_evaluation_context.py +++ b/tests/evaluation_context/test_evaluation_context.py @@ -1,4 +1,4 @@ -from open_feature.evaluation_context import EvaluationContext +from openfeature.evaluation_context import EvaluationContext def test_empty_evaluation_context_can_be_merged_with_non_empty_context(): diff --git a/tests/features/data.py b/tests/features/data.py index b4da35df..8172d259 100644 --- a/tests/features/data.py +++ b/tests/features/data.py @@ -1,6 +1,6 @@ -from open_feature.evaluation_context import EvaluationContext -from open_feature.flag_evaluation import FlagResolutionDetails, Reason -from open_feature.provider.in_memory_provider import InMemoryFlag +from openfeature.evaluation_context import EvaluationContext +from openfeature.flag_evaluation import FlagResolutionDetails, Reason +from openfeature.provider.in_memory_provider import InMemoryFlag def context_func(flag: InMemoryFlag, evaluation_context: EvaluationContext): diff --git a/tests/features/steps/steps.py b/tests/features/steps/steps.py index 702036ed..e20687fc 100644 --- a/tests/features/steps/steps.py +++ b/tests/features/steps/steps.py @@ -2,12 +2,12 @@ from behave import given, then, when -from open_feature.api import get_client, set_provider -from open_feature.client import OpenFeatureClient -from open_feature.evaluation_context import EvaluationContext -from open_feature.exception import ErrorCode -from open_feature.flag_evaluation import FlagEvaluationDetails, Reason -from open_feature.provider.in_memory_provider import InMemoryProvider +from openfeature.api import get_client, set_provider +from openfeature.client import OpenFeatureClient +from openfeature.evaluation_context import EvaluationContext +from openfeature.exception import ErrorCode +from openfeature.flag_evaluation import FlagEvaluationDetails, Reason +from openfeature.provider.in_memory_provider import InMemoryProvider from tests.features.data import IN_MEMORY_FLAGS # Common step definitions diff --git a/tests/hook/conftest.py b/tests/hook/conftest.py index 2671e7fd..5a3d8092 100644 --- a/tests/hook/conftest.py +++ b/tests/hook/conftest.py @@ -2,7 +2,7 @@ import pytest -from open_feature.evaluation_context import EvaluationContext +from openfeature.evaluation_context import EvaluationContext @pytest.fixture() diff --git a/tests/hook/test_hook_support.py b/tests/hook/test_hook_support.py index 7b748349..02cfed1c 100644 --- a/tests/hook/test_hook_support.py +++ b/tests/hook/test_hook_support.py @@ -1,14 +1,14 @@ from unittest.mock import ANY -from open_feature.flag_evaluation import FlagEvaluationDetails, FlagType -from open_feature.hook import HookContext -from open_feature.hook.hook_support import ( +from openfeature.flag_evaluation import FlagEvaluationDetails, FlagType +from openfeature.hook import HookContext +from openfeature.hook.hook_support import ( after_all_hooks, after_hooks, before_hooks, error_hooks, ) -from open_feature.immutable_dict.mapping_proxy_type import MappingProxyType +from openfeature.immutable_dict.mapping_proxy_type import MappingProxyType def test_error_hooks_run_error_method(mock_hook): diff --git a/tests/provider/test_in_memory_provider.py b/tests/provider/test_in_memory_provider.py index 61f4d562..00a9d455 100644 --- a/tests/provider/test_in_memory_provider.py +++ b/tests/provider/test_in_memory_provider.py @@ -1,8 +1,8 @@ from numbers import Number -from open_feature.exception import ErrorCode -from open_feature.flag_evaluation import FlagResolutionDetails, Reason -from open_feature.provider.in_memory_provider import InMemoryProvider, InMemoryFlag +from openfeature.exception import ErrorCode +from openfeature.flag_evaluation import FlagResolutionDetails, Reason +from openfeature.provider.in_memory_provider import InMemoryProvider, InMemoryFlag def test_should_return_in_memory_provider_metadata(): diff --git a/tests/provider/test_no_op_provider.py b/tests/provider/test_no_op_provider.py index b2762392..3876091a 100644 --- a/tests/provider/test_no_op_provider.py +++ b/tests/provider/test_no_op_provider.py @@ -1,6 +1,6 @@ from numbers import Number -from open_feature.provider.no_op_provider import NoOpProvider +from openfeature.provider.no_op_provider import NoOpProvider def test_should_return_no_op_provider_metadata(): diff --git a/tests/test_api.py b/tests/test_api.py index 270f7760..17c9edc3 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2,7 +2,7 @@ import pytest -from open_feature.api import ( +from openfeature.api import ( get_client, get_provider, set_provider, @@ -13,11 +13,11 @@ add_hooks, clear_hooks, ) -from open_feature.evaluation_context import EvaluationContext -from open_feature.exception import ErrorCode, GeneralError -from open_feature.hook import Hook -from open_feature.provider.metadata import Metadata -from open_feature.provider.no_op_provider import NoOpProvider +from openfeature.evaluation_context import EvaluationContext +from openfeature.exception import ErrorCode, GeneralError +from openfeature.hook import Hook +from openfeature.provider.metadata import Metadata +from openfeature.provider.no_op_provider import NoOpProvider def test_should_not_raise_exception_with_noop_client(): diff --git a/tests/test_client.py b/tests/test_client.py index 65615a32..79e67d8f 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -2,12 +2,12 @@ import pytest -from open_feature.api import add_hooks, clear_hooks -from open_feature.client import OpenFeatureClient -from open_feature.exception import ErrorCode, OpenFeatureError -from open_feature.flag_evaluation import Reason -from open_feature.hook import Hook -from open_feature.provider.no_op_provider import NoOpProvider +from openfeature.api import add_hooks, clear_hooks +from openfeature.client import OpenFeatureClient +from openfeature.exception import ErrorCode, OpenFeatureError +from openfeature.flag_evaluation import Reason +from openfeature.hook import Hook +from openfeature.provider.no_op_provider import NoOpProvider @pytest.mark.parametrize( diff --git a/tests/test_flag_evaluation.py b/tests/test_flag_evaluation.py index 8baca90e..67608989 100644 --- a/tests/test_flag_evaluation.py +++ b/tests/test_flag_evaluation.py @@ -1,5 +1,5 @@ -from open_feature.exception import ErrorCode -from open_feature.flag_evaluation import FlagEvaluationDetails, Reason +from openfeature.exception import ErrorCode +from openfeature.flag_evaluation import FlagEvaluationDetails, Reason def test_evaulation_details_reason_should_be_a_string():