Skip to content
This repository was archived by the owner on Sep 28, 2023. It is now read-only.

Commit 09996e9

Browse files
author
Andy Harris
committed
add client class
1 parent 11740ce commit 09996e9

4 files changed

Lines changed: 228 additions & 186 deletions

File tree

optimizely/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
# Authors:
44
# Andy Harris <andy.harris@optimizely.com>
55

6-
# configuration variables
7-
api_key = None
8-
api_base = 'https://www.optimizelyapis.com/experiment/v1/'
6+
# Client
7+
from optimizely.client import Client
98

109
# Resources
1110
from optimizely.resource import Project, Experiment, Result, Variation, Goal, Audience

optimizely/api_requester.py

Lines changed: 0 additions & 41 deletions
This file was deleted.

optimizely/client.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import urlparse
2+
import requests
3+
4+
from optimizely import error
5+
from optimizely import resource
6+
7+
base = 'https://www.optimizelyapis.com/experiment/v1/'
8+
9+
10+
class Client(object):
11+
ALLOWED_REQUESTS = ['get', 'post', 'put', 'delete']
12+
13+
def __init__(self, api_key, api_base=base):
14+
self.api_key = api_key
15+
self.api_base = api_base
16+
17+
self.Project = resource.ResourceGenerator(client=self, resource=resource.Project)
18+
self.Experiment = resource.ResourceGenerator(client=self, resource=resource.Experiment)
19+
self.Variation = resource.ResourceGenerator(client=self, resource=resource.Variation)
20+
self.Goal = resource.ResourceGenerator(client=self, resource=resource.Goal)
21+
self.Audience = resource.ResourceGenerator(client=self, resource=resource.Audience)
22+
23+
def request(self, method, url_parts, headers=None, data=''):
24+
25+
if method in self.ALLOWED_REQUESTS:
26+
# add request token header
27+
headers = headers or {}
28+
headers.update({'Token': self.api_key})
29+
30+
# make request and return parsed response
31+
return self.parse_response(getattr(requests, method)(urlparse.urljoin(
32+
self.api_base, '/'.join([str(url_part) for url_part in url_parts])), headers=headers, data=data))
33+
else:
34+
raise BadRequestError('%s is not a valid request type.' % method)
35+
36+
@staticmethod
37+
def parse_response(resp):
38+
if resp.status_code in [200, 201, 202]:
39+
return resp.json()
40+
elif resp.status_code == 204:
41+
return
42+
elif resp.status_code == 400:
43+
raise error.BadRequestError(resp.json().get('message'))
44+
elif resp.status_code == 401:
45+
raise error.UnauthorizedError(resp.json().get('message'))
46+
elif resp.status_code == 403:
47+
raise error.ForbiddenError(resp.json().get('message'))
48+
elif resp.status_code == 404:
49+
raise error.NotFoundError(resp.json().get('message'))
50+
elif resp.status_code == 429:
51+
raise error.TooManyRequestsError(resp.json().get('message'))
52+
elif resp.status_code == 503:
53+
raise error.ServiceUnavailableError(resp.json().get('message'))
54+
else:
55+
raise error.OptimizelyError(resp.text)

0 commit comments

Comments
 (0)