diff --git a/openfeature/providers/python-provider/gofeatureflag_python_provider/provider.py b/openfeature/providers/python-provider/gofeatureflag_python_provider/provider.py index 6847f62c907..8d0302a8fa4 100644 --- a/openfeature/providers/python-provider/gofeatureflag_python_provider/provider.py +++ b/openfeature/providers/python-provider/gofeatureflag_python_provider/provider.py @@ -19,6 +19,7 @@ ErrorCode, FlagNotFoundError, GeneralError, + InvalidContextError, OpenFeatureError, TypeMismatchError, ) @@ -210,16 +211,29 @@ def generic_go_feature_flag_resolver( body=goff_request.model_dump_json(), ) + response_body = response.data + + # Handle 404 error code if response.status == HTTPStatus.NOT_FOUND.value: raise FlagNotFoundError( "flag {} was not found in your configuration".format(flag_key) ) - if int(response.status) >= HTTPStatus.BAD_REQUEST.value: + # Handle 400 error code + if int(response.status) == HTTPStatus.BAD_REQUEST.value: + response_dict = json.loads(response_body) + error_message = response_dict.get("message") + + if error_message is None: + error_message = "no error message given." + + raise InvalidContextError("Invalid context: " + error_message) + + # Handle every error response above 400 + if int(response.status) > HTTPStatus.BAD_REQUEST.value: raise GeneralError( "impossible to contact GO Feature Flag relay proxy instance" ) - response_body = response.data response_flag_evaluation = ResponseFlagEvaluation.model_validate_json( response_body