feat(feature_flag): Provide user with ability to override feature flags
ref: #693 #493 #575
This commit is contained in:
@ -14,6 +14,7 @@ feature_flag = {
|
||||
'disable_downloading': False # Prevent downloading feature flags
|
||||
'unique_id': 'unique ID for application', # Unique ID for this instance of your Django application
|
||||
'version': '1.0.0', # The Version of Your Django Application
|
||||
'over_rides': [] # list(dict). Feature Flag over rides. use same format as API endpoint.
|
||||
} # Note: All key values are strings
|
||||
|
||||
```
|
||||
|
@ -76,6 +76,9 @@ class CenturionFeatureFlagging:
|
||||
_last_modified: datetime = None
|
||||
""" Last modified date/time of the feature flags"""
|
||||
|
||||
_over_rides: dict = None
|
||||
"""Feature Flag Over rides."""
|
||||
|
||||
_response: requests.Response = None
|
||||
"""Cached response from fetched feature flags"""
|
||||
|
||||
@ -95,6 +98,7 @@ class CenturionFeatureFlagging:
|
||||
disable_downloading: bool = False,
|
||||
unique_id: str = None,
|
||||
version: str = None,
|
||||
over_rides: dict = None,
|
||||
):
|
||||
|
||||
if not str(cache_dir).endswith('/'):
|
||||
@ -108,6 +112,21 @@ class CenturionFeatureFlagging:
|
||||
|
||||
self._disable_downloading = disable_downloading
|
||||
|
||||
if over_rides:
|
||||
|
||||
_over_rides: dict = {}
|
||||
|
||||
for entry in over_rides:
|
||||
|
||||
[*key], [*flag] = zip(*entry.items())
|
||||
|
||||
_over_rides.update({
|
||||
key[0]: FeatureFlag(key[0], flag[0])
|
||||
})
|
||||
|
||||
self._over_rides = _over_rides
|
||||
|
||||
|
||||
|
||||
if version is None:
|
||||
|
||||
@ -174,6 +193,7 @@ class CenturionFeatureFlagging:
|
||||
|
||||
if(
|
||||
self._feature_flags.get(key, None) is None
|
||||
and self._over_rides.get(key, None) is None
|
||||
and raise_exceptions
|
||||
):
|
||||
|
||||
@ -182,10 +202,19 @@ class CenturionFeatureFlagging:
|
||||
elif(
|
||||
not raise_exceptions
|
||||
and self._feature_flags.get(key, None) is None
|
||||
and self._over_rides.get(key, None) is None
|
||||
):
|
||||
|
||||
return False
|
||||
|
||||
elif(
|
||||
not raise_exceptions
|
||||
and self._over_rides.get(key, None) is not None
|
||||
):
|
||||
|
||||
return self._over_rides[key]
|
||||
|
||||
|
||||
return self._feature_flags[key]
|
||||
|
||||
|
||||
|
@ -27,6 +27,7 @@ class Command(BaseCommand):
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
self.stdout.write('Fetching Feature Flags.....')
|
||||
|
@ -21,6 +21,7 @@ class FeatureFlagMiddleware:
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
|
||||
|
@ -24,6 +24,7 @@ if getattr(settings,'feature_flag', None):
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
_feature_flagging.get()
|
||||
|
@ -55,6 +55,7 @@ class APIRootView(
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
|
||||
@ -77,6 +78,7 @@ class SimpleRouter(
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
self._feature_flagging.get()
|
||||
@ -103,6 +105,7 @@ class DefaultRouter(
|
||||
disable_downloading = settings.feature_flag.get('disable_downloading', False),
|
||||
unique_id = settings.feature_flag.get('unique_id', None),
|
||||
version = settings.feature_flag.get('version', None),
|
||||
over_rides = settings.feature_flag.get('over_rides', None),
|
||||
)
|
||||
|
||||
self._feature_flagging.get()
|
||||
|
Reference in New Issue
Block a user