Skip to content

Commit 7dc118e

Browse files
author
Pijush Chakraborty
committed
Minor update to API signature
1 parent dc1d17b commit 7dc118e

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

firebase_admin/remote_config.py

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,16 @@ class ServerTemplateData:
2626
"""Represents a Server Template Data class.
2727
"""
2828
def __init__(self, resp):
29+
2930
self._parameters = resp.body.parameters
3031
self._conditions = resp.body.conditions
3132
self._version = resp.body.version
32-
self._etag = resp.headers.get('ETag')
33+
self._parameterGroups = resp.body.parameterGroups
34+
self._etag = resp.headers.get('etag')
3335

3436
@property
3537
def parameters(self):
38+
# TODO: convert to Parameters
3639
return self._parameters
3740

3841
@property
@@ -46,6 +49,10 @@ def version(self):
4649
@property
4750
def conditions(self):
4851
return self._conditions
52+
53+
@property
54+
def conditions(self):
55+
return self._parameterGroups
4956

5057
class Parameter:
5158
""" Representation of a remote config parameter."""
@@ -84,22 +91,26 @@ def use_in_app_default(self):
8491
class ServerTemplate:
8592
"""Represents a Server Template with implementations for loading and evaluting the tempalte.
8693
"""
87-
def __init__(self, app: App, default_config: Optional[Dict[str, str]] = None):
94+
def __init__(self, app: App = None, default_config: Optional[Dict[str, str]] = None):
8895
self._rc_service = _utils.get_app_service(app, _REMOTE_CONFIG_ATTRIBUTE, _RemoteConfigService)
8996

9097
# Field to represent the cached template. This gets set when the template is
9198
# fetched from RC servers via the load API, or via the set API.
9299
self._cache = None
93-
for key in default_config:
94-
self._stringified_default_config[key] = default_config[key]
100+
if default_config is not None:
101+
for key in default_config:
102+
self._stringified_default_config[key] = default_config[key]
103+
else:
104+
self._stringified_default_config[key] = None
95105

96106
async def load(self):
97107
self._cache = await self._rc_service.getServerTemplate()
98108

99109
def evaluate(self, context: Optional[Dict[str, str | int]]):
100110
# Logic to process the cached template into a ServerConfig here
101111
# TODO: add Condition evaluator
102-
return ServerConfig(config_values=context.values)
112+
self._evaluator = ConditionEvaluator(self._cache.conditions, context)
113+
return ServerConfig(config_values=self._evaluator.evaluate())
103114

104115
def set(self, template):
105116
if isinstance(template, str):
@@ -115,13 +126,13 @@ def __init__(self, config_values):
115126
self._config_values = config_values # dictionary of param key to values
116127

117128
def get_boolean(self, key):
118-
return self._config_values[key]
129+
return bool(self.get_value(key))
119130

120131
def get_string(self, key):
121-
return self._config_values[key]
132+
return str(self.get_value(key))
122133

123134
def get_int(self, key):
124-
return self._config_values[key]
135+
return int(self.get_value(key))
125136

126137
def get_value(self, key):
127138
return self._config_values[key]
@@ -160,13 +171,27 @@ def _get_url_prefix(self):
160171
return "/v1/projects/{0}".format(self._project_id)
161172

162173

163-
async def get_server_template(app: App, default_config: Optional[Dict[str, str]] = None):
174+
class _ConditionEvaluator:
175+
""" Internal class that facilitates sending requests to the Firebase Remote
176+
Config backend API. """
177+
178+
def __init__(self, context, conditions):
179+
self._context = context
180+
self._conditions = conditions
181+
182+
def evaluate(self):
183+
# TODO: Write evaluator
184+
return {}
185+
186+
187+
async def get_server_template(app: App = None, default_config: Optional[Dict[str, str]] = None):
164188
template = init_server_template(app, default_config)
165189
await template.load()
166190
return template
167191

168-
def init_server_template(app: App, default_config: Optional[Dict[str, str]] = None,
192+
def init_server_template(app: App = None, default_config: Optional[Dict[str, str]] = None,
169193
template_data: Optional[ServerTemplateData] = None):
170194
template = ServerTemplate(app, default_config=default_config)
171-
template.set(template_data)
195+
if template_data is not None:
196+
template.set(template_data)
172197
return template

0 commit comments

Comments
 (0)