@@ -200,6 +200,7 @@ def __init__(self, user_settings=None, defaults=None, import_strings=None):
200200 self ._user_settings = self .__check_user_settings (user_settings )
201201 self .defaults = defaults or DEFAULTS
202202 self .import_strings = import_strings or IMPORT_STRINGS
203+ self ._cached_attrs = set ()
203204
204205 @property
205206 def user_settings (self ):
@@ -223,6 +224,7 @@ def __getattr__(self, attr):
223224 val = perform_import (val , attr )
224225
225226 # Cache the result
227+ self ._cached_attrs .add (attr )
226228 setattr (self , attr , val )
227229 return val
228230
@@ -233,15 +235,21 @@ def __check_user_settings(self, user_settings):
233235 raise RuntimeError ("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting , SETTINGS_DOC ))
234236 return user_settings
235237
238+ def reload (self ):
239+ for attr in self ._cached_attrs :
240+ delattr (self , attr )
241+ self ._cached_attrs .clear ()
242+ if hasattr (self , '_user_settings' ):
243+ delattr (self , '_user_settings' )
244+
236245
237246api_settings = APISettings (None , DEFAULTS , IMPORT_STRINGS )
238247
239248
240249def reload_api_settings (* args , ** kwargs ):
241- global api_settings
242- setting , value = kwargs ['setting' ], kwargs ['value' ]
250+ setting = kwargs ['setting' ]
243251 if setting == 'REST_FRAMEWORK' :
244- api_settings = APISettings ( value , DEFAULTS , IMPORT_STRINGS )
252+ api_settings . reload ( )
245253
246254
247255setting_changed .connect (reload_api_settings )
0 commit comments