Skip to content

Commit f658eff

Browse files
committed
first patch
1 parent 0a758c7 commit f658eff

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

localEvaluation.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from dataclasses import dataclass, asdict
2+
import os
3+
from amplitude_experiment import Experiment, User, LocalEvaluationConfig
4+
5+
6+
class CustomError(Exception):
7+
pass
8+
9+
10+
@dataclass
11+
class UserProperties:
12+
org_id: str = None
13+
org_name: str = None
14+
username: str = None
15+
email: str = None
16+
plan: str = None
17+
hub_region: str = None
18+
user_status: str = None
19+
subscription_type: str = None
20+
infra_provider: str = None
21+
template_id: str = None
22+
23+
24+
class FeatureFlag:
25+
def __init__(self, ):
26+
debug = bool(os.environ.get("LOCAL_EVALUATION_CONFIG_DEBUG")) or True
27+
server_url = os.environ.get("LOCAL_EVALUATION_CONFIG_SERVER_URL") or "https://api.lambdatest.com"
28+
flag_config_polling_interval_millis = (int(os.environ.get(
29+
"LOCAL_EVALUATION_CONFIG_POLL_INTERVAL")) or 120) * 1000
30+
flag_config_poller_request_timeout_millis = (int(os.environ.get(
31+
"LOCAL_EVALUATION_CONFIG_POLLER_REQUEST_TIMEOUT")) or 10) * 1000
32+
deploymentKey = os.environ.get("LOCAL_EVALUATION_DEPLOYMENT_KEY") or "server-jAqqJaX3l8PgNiJpcv9j20ywPzANQQFh"
33+
config = LocalEvaluationConfig(debug, server_url, flag_config_polling_interval_millis,
34+
flag_config_poller_request_timeout_millis)
35+
self.experiment = Experiment.initialize_local(deploymentKey, config)
36+
self.experiment.start()
37+
38+
def fetch(self, flagName, user):
39+
if not isinstance(user, UserProperties):
40+
raise CustomError("invalid userProperties object has passed")
41+
expUser = User(user_properties=asdict(user))
42+
variants = self.experiment.evaluate(expUser, [flagName])
43+
return variants
44+
45+
def GetFeatureFlagString(self, flagName, user):
46+
try:
47+
data = self.fetch(flagName, user)
48+
if data is not None and data.get(flagName) is not None:
49+
return data.get(flagName).value
50+
else:
51+
return ""
52+
except CustomError as e:
53+
print("An error occurred:", str(e))
54+
raise e
55+
56+
def GetFeatureFlagBool(self, flagName, user):
57+
try:
58+
data = self.fetch(flagName, user)
59+
if data is not None:
60+
return bool(data.get(flagName).value)
61+
else:
62+
return False
63+
except CustomError as e:
64+
print("An error occurred:", str(e))
65+
raise e
66+
67+
def GetFeatureFlagPayload(self, flagName, user):
68+
try:
69+
data = self.fetch(flagName, user)
70+
if data is not None:
71+
return data.get(flagName)
72+
else:
73+
return dict()
74+
except CustomError as e:
75+
print("An error occurred:", str(e))
76+
raise e

0 commit comments

Comments
 (0)