Python client for GoLab
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

89 lines
2.7 KiB

__all__ = ["__version__", "Client"]
__version__ = "0.1.0"
import collections
import json
import memcache
class Client(object):
__slots__ = ["connection"]
def __init__(self, host="127.0.0.1", port=11222):
self.connection = memcache.Client(["%s:%s" % (host, port)])
def get_user_variants(self, exp_ids, user_id):
keys = ['%s:%s' % (exp_id, user_id) for exp_id in exp_ids]
data = self.connection.get_multi(keys)
results = {}
for key, value in data.iteritems():
exp_id, _, _ = key.partition(":")
results[exp_id] = value
return results
def get_user_variant(self, exp_id, user_id):
key = '%s:%s' % (exp_id, user_id)
return self.connection.get(key)
def convert_user(self, exp_id, user_id):
key = '%s:%s' % (exp_id, user_id)
return self.connection.incr(key)
def add_new_experiment(self, data):
data = json.dumps(data)
return self.connection.add("1", data)
def update_experiment(self, exp_id, data):
data = json.dumps(data)
return self.connection.replace(exp_id, data)
def get_experiment(self, exp_id):
data = self.connection.get("experiment:%s" % (exp_id, ))
if data:
return json.loads(data)
return None
def get_active_experiments(self):
data = self.connection.get("experiment:active")
results = {}
if data:
data = json.loads(data)
for exp in data:
results[int(exp['id'])] = exp
return results
def get_all_experiments(self):
data = self.connection.get("experiment:*")
results = {}
if data:
data = json.loads(data)
for exp in data:
results[int(exp['id'])] = exp
return results
def deactivate_experiment(self, exp_id):
return self.connection.delete(exp_id)
def activate_experiment(self, exp_id):
return self.connection.touch(exp_id)
def get_active_experiment_stats(self):
data = self.connection.get_stats()
results = collections.defaultdict(lambda: collections.defaultdict(dict))
for server, stats in data:
for key, value in stats.iteritems():
key, exp_id, bucket_id = key.split(".")
results[int(exp_id)][int(bucket_id)][key] = value
return results
def get_experiment_stats(self, exp_id):
data = self.connection.get_stats(str(exp_id))
results = collections.defaultdict(dict)
for server, stats in data:
for key, value in stats.iteritems():
key, exp_id, bucket_id = key.split(".")
results[int(bucket_id)][int(key)] = value
return results