Skip to content

Commit c0ae21e

Browse files
committed
refactor: extract error code to exception mapping to class variable
Signed-off-by: Federico Bond <federicobond@gmail.com>
1 parent 62b6301 commit c0ae21e

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

openfeature/exception.py

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,10 @@
11
from __future__ import annotations
22

33
import typing
4+
from collections.abc import Mapping
45
from enum import Enum
56

67

7-
class ErrorCode(Enum):
8-
PROVIDER_NOT_READY = "PROVIDER_NOT_READY"
9-
PROVIDER_FATAL = "PROVIDER_FATAL"
10-
FLAG_NOT_FOUND = "FLAG_NOT_FOUND"
11-
PARSE_ERROR = "PARSE_ERROR"
12-
TYPE_MISMATCH = "TYPE_MISMATCH"
13-
TARGETING_KEY_MISSING = "TARGETING_KEY_MISSING"
14-
INVALID_CONTEXT = "INVALID_CONTEXT"
15-
GENERAL = "GENERAL"
16-
17-
@classmethod
18-
def to_exception(
19-
cls, error_code: ErrorCode, error_message: str
20-
) -> OpenFeatureError:
21-
return typing.cast(
22-
OpenFeatureError,
23-
{
24-
ErrorCode.PROVIDER_NOT_READY: ProviderNotReadyError,
25-
ErrorCode.PROVIDER_FATAL: ProviderFatalError,
26-
ErrorCode.FLAG_NOT_FOUND: FlagNotFoundError,
27-
ErrorCode.PARSE_ERROR: ParseError,
28-
ErrorCode.TYPE_MISMATCH: TypeMismatchError,
29-
ErrorCode.TARGETING_KEY_MISSING: TargetingKeyMissingError,
30-
ErrorCode.INVALID_CONTEXT: InvalidContextError,
31-
ErrorCode.GENERAL: GeneralError,
32-
}.get(error_code, GeneralError)(error_message),
33-
)
34-
35-
368
class OpenFeatureError(Exception):
379
"""
3810
A generic open feature exception, this exception should not be raised. Instead
@@ -176,3 +148,32 @@ def __init__(self, error_message: typing.Optional[str]):
176148
raised
177149
"""
178150
super().__init__(ErrorCode.INVALID_CONTEXT, error_message)
151+
152+
153+
class ErrorCode(Enum):
154+
PROVIDER_NOT_READY = "PROVIDER_NOT_READY"
155+
PROVIDER_FATAL = "PROVIDER_FATAL"
156+
FLAG_NOT_FOUND = "FLAG_NOT_FOUND"
157+
PARSE_ERROR = "PARSE_ERROR"
158+
TYPE_MISMATCH = "TYPE_MISMATCH"
159+
TARGETING_KEY_MISSING = "TARGETING_KEY_MISSING"
160+
INVALID_CONTEXT = "INVALID_CONTEXT"
161+
GENERAL = "GENERAL"
162+
163+
__exceptions__: Mapping[str, typing.Callable[[str], OpenFeatureError]] = {
164+
PROVIDER_NOT_READY: ProviderNotReadyError,
165+
PROVIDER_FATAL: ProviderFatalError,
166+
FLAG_NOT_FOUND: FlagNotFoundError,
167+
PARSE_ERROR: ParseError,
168+
TYPE_MISMATCH: TypeMismatchError,
169+
TARGETING_KEY_MISSING: TargetingKeyMissingError,
170+
INVALID_CONTEXT: InvalidContextError,
171+
GENERAL: GeneralError,
172+
}
173+
174+
@classmethod
175+
def to_exception(
176+
cls, error_code: ErrorCode, error_message: str
177+
) -> OpenFeatureError:
178+
exc = cls.__exceptions__.get(error_code.value, GeneralError)
179+
return exc(error_message)

0 commit comments

Comments
 (0)