|
1 | | -import typing |
| 1 | +from typing import Any, Optional |
2 | 2 | from datetime import datetime |
3 | 3 | from email.utils import formatdate |
4 | 4 | from functools import lru_cache |
@@ -76,8 +76,8 @@ async def refresh_environment_caches(self): |
76 | 76 |
|
77 | 77 | def get_flags_response_data( |
78 | 78 | self, environment_key: str, feature: str = None |
79 | | - ) -> dict[str, typing.Any]: |
80 | | - environment_document = self.get_environment(environment_key) |
| 79 | + ) -> dict[str, Any]: |
| 80 | + environment_document = self.get_environment(environment_key=environment_key) |
81 | 81 | environment = EnvironmentModel.model_validate(environment_document) |
82 | 82 | is_server_key = environment_key.startswith(SERVER_API_KEY_PREFIX) |
83 | 83 |
|
@@ -105,8 +105,8 @@ def get_flags_response_data( |
105 | 105 |
|
106 | 106 | def get_identity_response_data( |
107 | 107 | self, input_data: IdentityWithTraits, environment_key: str |
108 | | - ) -> dict[str, typing.Any]: |
109 | | - environment_document = self.get_environment(environment_key) |
| 108 | + ) -> dict[str, Any]: |
| 109 | + environment_document = self.get_environment(environment_key=environment_key) |
110 | 110 | environment = EnvironmentModel.model_validate(environment_document) |
111 | 111 | is_server_key = environment_key.startswith(SERVER_API_KEY_PREFIX) |
112 | 112 |
|
@@ -137,14 +137,22 @@ def get_identity_response_data( |
137 | 137 | } |
138 | 138 | return data |
139 | 139 |
|
140 | | - def get_environment(self, client_side_key: str) -> dict[str, typing.Any]: |
| 140 | + def get_environment( |
| 141 | + self, |
| 142 | + *, |
| 143 | + environment_key: Optional[str] = None, |
| 144 | + ) -> dict[str, Any]: |
| 145 | + if environment_key and environment_key.startswith(SERVER_API_KEY_PREFIX): |
| 146 | + client_side_key = self._get_client_key_from_server_key(environment_key) |
| 147 | + else: |
| 148 | + client_side_key = environment_key |
| 149 | + |
141 | 150 | if environment_document := self.cache.get_environment(client_side_key): |
142 | 151 | return environment_document |
143 | | - raise FlagsmithUnknownKeyError(client_side_key) |
144 | 152 |
|
145 | | - async def _fetch_document( |
146 | | - self, key_pair: EnvironmentKeyPair |
147 | | - ) -> dict[str, typing.Any]: |
| 153 | + raise FlagsmithUnknownKeyError(environment_key) |
| 154 | + |
| 155 | + async def _fetch_document(self, key_pair: EnvironmentKeyPair) -> dict[str, Any]: |
148 | 156 | headers = { |
149 | 157 | "X-Environment-Key": key_pair.server_side_key, |
150 | 158 | } |
@@ -186,3 +194,9 @@ async def _clear_endpoint_caches(self): |
186 | 194 | func.cache_clear() |
187 | 195 | except AttributeError: |
188 | 196 | pass |
| 197 | + |
| 198 | + def _get_client_key_from_server_key(self, server_key: str) -> str: |
| 199 | + for key_pair in self.settings.environment_key_pairs: |
| 200 | + if key_pair.server_side_key == server_key: |
| 201 | + return key_pair.client_side_key |
| 202 | + raise FlagsmithUnknownKeyError(server_key) |
0 commit comments