Skip to content

Commit c774dde

Browse files
committed
Implement comments
1 parent dafb205 commit c774dde

File tree

6 files changed

+67
-34
lines changed

6 files changed

+67
-34
lines changed

optimizely/event/event_factory.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,8 @@ def create_log_event(
100100

101101
event_params = event_batch.get_event_params()
102102

103-
region = user_context.region
104-
if hasattr(region, 'value'):
105-
region_str = region.value
106-
elif region is None:
107-
region_str = 'US' # Default to US
108-
else:
109-
region_str = str(region)
110-
111-
region_key = region_str.upper()
103+
region = user_context.region or 'US' # Default to 'US' if None
104+
region_key = str(region).upper()
112105
endpoint = cls.EVENT_ENDPOINTS.get(region_key, cls.EVENT_ENDPOINTS['US'])
113106

114107
return log_event.LogEvent(endpoint, event_params, cls.HTTP_VERB, cls.HTTP_HEADERS)

optimizely/event/user_event.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from sys import version_info
1818

1919
from optimizely import version
20-
from optimizely.project_config import Region
2120

2221

2322
if version_info < (3, 8):
@@ -100,7 +99,7 @@ def __init__(
10099
class EventContext:
101100
""" Class respresenting User Event Context. """
102101

103-
def __init__(self, account_id: str, project_id: str, revision: str, anonymize_ip: bool, region: Region):
102+
def __init__(self, account_id: str, project_id: str, revision: str, anonymize_ip: bool, region: str):
104103
self.account_id = account_id
105104
self.project_id = project_id
106105
self.revision = revision

optimizely/event_builder.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,9 @@ def create_impression_event(
269269

270270
params[self.EventParams.USERS][0][self.EventParams.SNAPSHOTS].append(impression_params)
271271

272-
region = project_config.region.value if hasattr(project_config.region, 'value') else 'US'
273-
events_url = self.EVENTS_URLS.get(str(region), self.EVENTS_URLS['US'])
272+
region = project_config.region or 'US'
273+
region_key = str(region).upper()
274+
events_url = self.EVENTS_URLS.get(region_key, self.EVENTS_URLS['US'])
274275

275276
return Event(events_url, params, http_verb=self.HTTP_VERB, headers=self.HTTP_HEADERS)
276277

@@ -296,7 +297,8 @@ def create_conversion_event(
296297

297298
params[self.EventParams.USERS][0][self.EventParams.SNAPSHOTS].append(conversion_params)
298299

299-
region = project_config.region.value if hasattr(project_config.region, 'value') else 'US'
300-
events_url = self.EVENTS_URLS.get(str(region), self.EVENTS_URLS['US'])
300+
region = project_config.region or 'US'
301+
region_key = str(region).upper()
302+
events_url = self.EVENTS_URLS.get(region_key, self.EVENTS_URLS['US'])
301303

302304
return Event(events_url, params, http_verb=self.HTTP_VERB, headers=self.HTTP_HEADERS)

optimizely/project_config.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import json
1515
from typing import TYPE_CHECKING, Optional, Type, TypeVar, cast, Any, Iterable, List
1616
from sys import version_info
17-
from enum import Enum
1817

1918
from . import entities
2019
from . import exceptions
@@ -42,12 +41,6 @@
4241

4342
EntityClass = TypeVar('EntityClass')
4443

45-
46-
class Region(str, Enum):
47-
US = 'US'
48-
EU = 'EU'
49-
50-
5144
class ProjectConfig:
5245
""" Representation of the Optimizely project config. """
5346

@@ -92,11 +85,7 @@ def __init__(self, datafile: str | bytes, logger: Logger, error_handler: Any):
9285
self.all_segments: list[str] = []
9386

9487
region_value = config.get('region')
95-
self.region: Region
96-
if region_value == Region.EU.value:
97-
self.region = Region.EU
98-
else:
99-
self.region = Region.US
88+
self.region: str = region_value or 'US'
10089

10190
# Utility maps for quick lookup
10291
self.group_id_map: dict[str, entities.Group] = self._generate_key_map(self.groups, 'id', entities.Group)

tests/test_config.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from optimizely import logger
2222
from optimizely import optimizely
2323
from optimizely.helpers import enums
24-
from optimizely.project_config import ProjectConfig, Region
24+
from optimizely.project_config import ProjectConfig
2525
from . import base
2626

2727

@@ -159,22 +159,22 @@ def test_region_when_no_region(self):
159159
config_dict = copy.deepcopy(self.config_dict_with_multiple_experiments)
160160
opt_obj = optimizely.Optimizely(json.dumps(config_dict))
161161
project_config = opt_obj.config_manager.get_config()
162-
self.assertEqual(project_config.region, Region.US)
162+
self.assertEqual(project_config.region, 'US')
163163

164164
def test_region_when_specified_in_datafile(self):
165165
""" Test that region is set to 'US' when specified in the config. """
166166
config_dict_us = copy.deepcopy(self.config_dict_with_multiple_experiments)
167167
config_dict_us['region'] = 'US'
168168
opt_obj_us = optimizely.Optimizely(json.dumps(config_dict_us))
169169
project_config_us = opt_obj_us.config_manager.get_config()
170-
self.assertEqual(project_config_us.region, Region.US)
170+
self.assertEqual(project_config_us.region, 'US')
171171

172172
""" Test that region is set to 'EU' when specified in the config. """
173173
config_dict_eu = copy.deepcopy(self.config_dict_with_multiple_experiments)
174174
config_dict_eu['region'] = 'EU'
175175
opt_obj_eu = optimizely.Optimizely(json.dumps(config_dict_eu))
176176
project_config_eu = opt_obj_eu.config_manager.get_config()
177-
self.assertEqual(project_config_eu.region, Region.EU)
177+
self.assertEqual(project_config_eu.region, 'EU')
178178

179179
def test_cmab_field_population(self):
180180
""" Test that the cmab field is populated correctly in experiments."""

tests/test_event_builder.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
from optimizely import event_builder
1919
from optimizely import version
20-
from optimizely.project_config import Region
2120
from . import base
2221

2322

@@ -141,11 +140,14 @@ def test_create_impression_event_with_EU(self):
141140
'revision': '42',
142141
}
143142

144-
with mock.patch.object(self.project_config, 'region', new=Region.EU), mock.patch(
143+
self.project_config.region = 'EU'
144+
145+
with mock.patch.object(self.project_config, 'region', new='EU'), mock.patch(
145146
'time.time', return_value=42.123
146147
), mock.patch(
147148
'optimizely.bucketer.Bucketer._generate_bucket_value', return_value=5042
148149
), mock.patch('uuid.uuid4', return_value='a68cf1ad-0393-4e18-af87-efe8f01a7c9c'):
150+
self.project_config.region = 'EU'
149151
event_obj = self.event_builder.create_impression_event(
150152
self.project_config,
151153
self.project_config.get_experiment_from_key('test_experiment'),
@@ -618,7 +620,7 @@ def test_create_conversion_event_with_eu(self):
618620
'revision': '42',
619621
}
620622

621-
with mock.patch.object(self.project_config, 'region', new=Region.EU), mock.patch(
623+
with mock.patch.object(self.project_config, 'region', new='EU'), mock.patch(
622624
'time.time', return_value=42.123
623625
), mock.patch(
624626
'uuid.uuid4', return_value='a68cf1ad-0393-4e18-af87-efe8f01a7c9c'
@@ -634,6 +636,54 @@ def test_create_conversion_event_with_eu(self):
634636
event_builder.EventBuilder.HTTP_HEADERS,
635637
)
636638

639+
def test_create_conversion_event_with_invalid_region(self):
640+
""" Test that create_conversion_event creates Event object
641+
with right params when no attributes are provided. """
642+
643+
expected_params = {
644+
'account_id': '12001',
645+
'project_id': '111001',
646+
'visitors': [
647+
{
648+
'visitor_id': 'test_user',
649+
'attributes': [],
650+
'snapshots': [
651+
{
652+
'events': [
653+
{
654+
'timestamp': 42123,
655+
'entity_id': '111095',
656+
'uuid': 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c',
657+
'key': 'test_event',
658+
}
659+
]
660+
}
661+
],
662+
}
663+
],
664+
'client_name': 'python-sdk',
665+
'client_version': version.__version__,
666+
'enrich_decisions': True,
667+
'anonymize_ip': False,
668+
'revision': '42',
669+
}
670+
671+
with mock.patch.object(self.project_config, 'region', new='ZZ'), mock.patch(
672+
'time.time', return_value=42.123
673+
), mock.patch(
674+
'uuid.uuid4', return_value='a68cf1ad-0393-4e18-af87-efe8f01a7c9c'
675+
):
676+
event_obj = self.event_builder.create_conversion_event(
677+
self.project_config, 'test_event', 'test_user', None, None
678+
)
679+
self._validate_event_object(
680+
event_obj,
681+
event_builder.EventBuilder.EVENTS_URLS.get('US'),
682+
expected_params,
683+
event_builder.EventBuilder.HTTP_VERB,
684+
event_builder.EventBuilder.HTTP_HEADERS,
685+
)
686+
637687
def test_create_conversion_event__with_attributes(self):
638688
""" Test that create_conversion_event creates Event object
639689
with right params when attributes are provided. """

0 commit comments

Comments
 (0)