22import sys
33import typing
44from datetime import datetime
5+ from urllib .parse import urljoin
56
67import requests
78from flag_engine import engine
1213from flagsmith .analytics import AnalyticsProcessor
1314from flagsmith .exceptions import FlagsmithAPIError , FlagsmithClientError
1415from flagsmith .mappers import (
16+ map_context_and_identity_data_to_context ,
1517 map_environment_document_to_context ,
1618 map_environment_document_to_environment_updated_at ,
1719)
@@ -157,9 +159,9 @@ def __init__(
157159 self .request_timeout_seconds = request_timeout_seconds
158160 self .session .mount (self .api_url , HTTPAdapter (max_retries = retries ))
159161
160- self .environment_flags_url = f" { self .api_url } flags/"
161- self .identities_url = f" { self .api_url } identities/"
162- self .environment_url = f" { self .api_url } environment-document/"
162+ self .environment_flags_url = urljoin ( self .api_url , " flags/")
163+ self .identities_url = urljoin ( self .api_url , " identities/")
164+ self .environment_url = urljoin ( self .api_url , " environment-document/")
163165
164166 if self .enable_local_evaluation :
165167 if not environment_key .startswith ("ser." ):
@@ -183,9 +185,9 @@ def _initialise_local_evaluation(self) -> None:
183185 if not self ._evaluation_context :
184186 raise ValueError ("Unable to get environment from API key" )
185187
186- stream_url = (
187- f" { self .realtime_api_url } sse/environments/"
188- f"{ self ._evaluation_context ['environment' ]['key' ]} /stream"
188+ stream_url = urljoin (
189+ self .realtime_api_url ,
190+ f"sse/environments/ { self ._evaluation_context ['environment' ]['key' ]} /stream" ,
189191 )
190192
191193 self .event_stream_thread = EventStreamManager (
@@ -278,15 +280,11 @@ def get_identity_segments(
278280 "Local evaluation required to obtain identity segments."
279281 )
280282
281- identity_key = f"{ self ._evaluation_context ['environment' ]['key' ]} _{ identifier } "
282- context : engine .EvaluationContext = {
283- ** self ._evaluation_context ,
284- "identity" : {
285- "identifier" : identifier ,
286- "key" : identity_key ,
287- "traits" : dict (traits or {}),
288- },
289- }
283+ context = map_context_and_identity_data_to_context (
284+ context = self ._evaluation_context ,
285+ identifier = identifier ,
286+ traits = traits ,
287+ )
290288
291289 evaluation_result = engine .get_evaluation_result (
292290 context = context ,
@@ -354,22 +352,11 @@ def _get_identity_flags_from_document(
354352 if self ._evaluation_context is None :
355353 raise TypeError ("No environment present" )
356354
357- identity_key = f"{ self ._evaluation_context ['environment' ]['key' ]} _{ identifier } "
358- context : engine .EvaluationContext = {
359- ** self ._evaluation_context ,
360- "identity" : {
361- "identifier" : identifier ,
362- "key" : identity_key ,
363- "traits" : {
364- trait_key : (
365- trait_value_or_config ["value" ]
366- if isinstance (trait_value_or_config , dict )
367- else trait_value_or_config
368- )
369- for trait_key , trait_value_or_config in traits .items ()
370- },
371- },
372- }
355+ context = map_context_and_identity_data_to_context (
356+ context = self ._evaluation_context ,
357+ identifier = identifier ,
358+ traits = traits ,
359+ )
373360 evaluation_result = engine .get_evaluation_result (
374361 context = context ,
375362 )
0 commit comments