|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
3 | 3 | import typing
|
| 4 | +from collections.abc import Mapping |
4 | 5 | from enum import Enum
|
5 | 6 |
|
6 | 7 |
|
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 |
| - |
36 | 8 | class OpenFeatureError(Exception):
|
37 | 9 | """
|
38 | 10 | A generic open feature exception, this exception should not be raised. Instead
|
@@ -176,3 +148,32 @@ def __init__(self, error_message: typing.Optional[str]):
|
176 | 148 | raised
|
177 | 149 | """
|
178 | 150 | 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