"""Get feature flags on backend.""" from oto import response from owsrequest import request as requests from daemonJwtHandler import daemon_handler from salessheets import config from salessheets.constants import errors from salessheets.constants import features as features_constants from salessheets.constants import ows_services def get_user_features(orchard_user_id): """Get dict with all features for provided user. Args: orchard_user_id (str): unique identifier of user, example: 'alw:25824'. Returns: response.Response: .message is a dict in format {'feature_name': 'enabled', 'feature_name_2': 'control'}. """ if orchard_user_id: path = '/features/user/{user_id}'.format(user_id=orchard_user_id) else: path = '/features' authorization = daemon_handler.daemon_handler(ows_services.OWS_FEATURES) features_response = requests.process( 'daemon-sales-sheets', config.ENVIRONMENT, 'GET', ows_services.OWS_FEATURES, path, authorization_header=authorization, isDaemon=True) if features_response.status_code != 200: return response.create_error_response( status=features_response.status_code, message=features_response.content, code=errors.ERROR_CODE_FEATURE_FLAG_FAILED) user_features = features_response.json() return response.Response(user_features) def get_active_variant(flag): """Get the active variant of a flag.""" features_response = requests.process( 'daemon-sales-sheets', config.ENVIRONMENT, 'GET', ows_services.OWS_FEATURES, '/features/{flag}'.format(flag=flag)) if features_response.status_code != 200: return response.create_error_response( status=features_response.status_code, message=features_response.content, code=errors.ERROR_CODE_FEATURE_FLAG_FAILED) return response.Response(features_response.text) def is_example_feature_enabled(orchard_user_id): """Check example_feature flag. Returns: bool """ user_features = get_user_features(orchard_user_id) return user_features.message.get( features_constants.EXAMPLE_FEATURE) == 'enabled' def check_user_features(user_id=None): """Check if relevant user features are enabled. Args: user_id (str): The Orchard User ID. Returns: response.Response: containing the user features. """ user_features_response = get_user_features(user_id) if not user_features_response: return user_features_response user_features = user_features_response.message return response.Response({ 'is_japan_sales_sheets_enabled': user_features.get( features_constants.JAPAN_SALES_SHEETS) == 'enabled', 'is_global_sync_highlights_enabled': user_features.get( features_constants.GLOBAL_SYNC_HIGHLIGHTS) == 'enabled' })