1
- import json
2
1
import logging
3
2
import typing
4
- from datetime import datetime , timezone
3
+ from datetime import timezone
5
4
5
+ import pydantic
6
6
import requests
7
7
from flag_engine import engine
8
8
from flag_engine .environments .models import EnvironmentModel
@@ -188,21 +188,6 @@ def _initialise_local_evaluation(self) -> None:
188
188
self .environment_data_polling_manager_thread .start ()
189
189
190
190
def handle_stream_event (self , event : StreamEvent ) -> None :
191
- try :
192
- event_data = json .loads (event .data )
193
- except json .JSONDecodeError as e :
194
- raise FlagsmithAPIError ("Unable to get valid json from event data." ) from e
195
-
196
- try :
197
- stream_updated_at = datetime .fromtimestamp (event_data .get ("updated_at" ))
198
- except TypeError as e :
199
- raise FlagsmithAPIError (
200
- "Unable to get valid timestamp from event data."
201
- ) from e
202
-
203
- if stream_updated_at .tzinfo is None :
204
- stream_updated_at = stream_updated_at .astimezone (timezone .utc )
205
-
206
191
if not self ._environment :
207
192
raise ValueError (
208
193
"Unable to access environment. Environment should not be null"
@@ -211,7 +196,7 @@ def handle_stream_event(self, event: StreamEvent) -> None:
211
196
if environment_updated_at .tzinfo is None :
212
197
environment_updated_at = environment_updated_at .astimezone (timezone .utc )
213
198
214
- if stream_updated_at > environment_updated_at :
199
+ if event . updated_at > environment_updated_at :
215
200
self .update_environment ()
216
201
217
202
def get_environment_flags (self ) -> Flags :
@@ -282,17 +267,13 @@ def get_identity_segments(
282
267
def update_environment (self ) -> None :
283
268
try :
284
269
self ._environment = self ._get_environment_from_api ()
285
- except (FlagsmithAPIError , requests . RequestException ):
270
+ except (FlagsmithAPIError , pydantic . ValidationError ):
286
271
logger .exception ("Error updating environment" )
287
- self ._update_overrides ()
288
-
289
- def _update_overrides (self ) -> None :
290
- if not self ._environment :
291
- return
292
- if overrides := self ._environment .identity_overrides :
293
- self ._identity_overrides_by_identifier = {
294
- identity .identifier : identity for identity in overrides
295
- }
272
+ else :
273
+ if overrides := self ._environment .identity_overrides :
274
+ self ._identity_overrides_by_identifier = {
275
+ identity .identifier : identity for identity in overrides
276
+ }
296
277
297
278
def _get_environment_from_api (self ) -> EnvironmentModel :
298
279
environment_data = self ._get_json_response (self .environment_url , method = "GET" )
@@ -383,13 +364,9 @@ def _get_json_response(
383
364
response = request_method (
384
365
url , json = body , timeout = self .request_timeout_seconds
385
366
)
386
- if response .status_code != 200 :
387
- raise FlagsmithAPIError (
388
- "Invalid request made to Flagsmith API. Response status code: %d" ,
389
- response .status_code ,
390
- )
367
+ response .raise_for_status ()
391
368
return response .json ()
392
- except ( requests .ConnectionError , json . JSONDecodeError ) as e :
369
+ except requests .RequestException as e :
393
370
raise FlagsmithAPIError (
394
371
"Unable to get valid response from Flagsmith API."
395
372
) from e
0 commit comments