__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