@@ -33,10 +33,11 @@ class Status(IntEnum):
3333
3434
3535class FetchResponse (object ):
36- def __init__ (self , status , entry , error = None ):
36+ def __init__ (self , status , entry , error = None , is_transient_error = False ):
3737 self ._status = status
3838 self .entry = entry
3939 self .error = error
40+ self .is_transient_error = is_transient_error
4041
4142 def is_fetched (self ):
4243 """Gets whether a new configuration value was fetched or not.
@@ -65,8 +66,8 @@ def not_modified(cls):
6566 return FetchResponse (Status .NotModified , ConfigEntry .empty )
6667
6768 @classmethod
68- def failure (cls , error ):
69- return FetchResponse (Status .Failure , ConfigEntry .empty , error )
69+ def failure (cls , error , is_transient_error ):
70+ return FetchResponse (Status .Failure , ConfigEntry .empty , error , is_transient_error )
7071
7172
7273class ConfigFetcher (object ):
@@ -169,19 +170,23 @@ def _fetch(self, etag):
169170 return FetchResponse .success (ConfigEntry (config , response_etag , get_utc_now_seconds_since_epoch ()))
170171 elif response .status_code == 304 :
171172 return FetchResponse .not_modified ()
173+ elif response .status_code in [404 , 403 ]:
174+ error = 'Double-check your SDK Key at https://app.configcat.com/sdkkey. ' \
175+ 'Received unexpected response: %s' % str (response )
176+ self .log .error (error )
177+ return FetchResponse .failure (error , False )
172178 else :
173179 raise (requests .HTTPError (response ))
174180 except HTTPError as e :
175- error = 'Double-check your SDK Key at https://app.configcat.com/sdkkey. ' \
176- 'Received unexpected response: %s' % str (e .response )
181+ error = 'Unexpected HTTP response was received: %s' % str (e .response )
177182 self .log .error (error )
178- return FetchResponse .failure (error )
183+ return FetchResponse .failure (error , True )
179184 except Timeout :
180185 error = 'Request timed out. Timeout values: [connect: {}s, read: {}s]' .format (
181- self ._config_fetcher . get_connect_timeout (), self . _config_fetcher .get_read_timeout ())
186+ self .get_connect_timeout (), self .get_read_timeout ())
182187 self .log .error (error )
183- return FetchResponse .failure (error )
188+ return FetchResponse .failure (error , True )
184189 except Exception as e :
185190 error = 'Exception occurred during fetching: ' + str (e )
186191 self .log .error (error )
187- return FetchResponse .failure (error )
192+ return FetchResponse .failure (error , True )
0 commit comments