diff --git a/pydusken/__init__.py b/pydusken/__init__.py index 4a6290f..6af121e 100644 --- a/pydusken/__init__.py +++ b/pydusken/__init__.py @@ -7,10 +7,9 @@ from .members import Members class DuskenApi(object): - _base_url = "http://127.0.0.1:8000/api/v1" - #base_url = "http://duskendev.neuf.no/api/v1" - #base_url = "http://dusken.neuf.no/api/v1" - def __init__(self, username, password): + def __init__(self, username, password, base_url="http://127.0.0.1:8000/api/v1"): + self._base_url = base_url + self._username = username self._api_key = self.get_api_key(username, password) self.members = Members(username, self._api_key, self._base_url) diff --git a/pydusken/members.py b/pydusken/members.py index c5c29c4..1af1aa9 100644 --- a/pydusken/members.py +++ b/pydusken/members.py @@ -9,19 +9,48 @@ class Members(object): self._api_key = api_key self._base_url = base_url + def __request_auth_headers(self): + return { + 'Authorization': "ApiKey {}:{}".format(self._username, self._api_key) + } + + + def __GET(self, url, headers={}, params={}): + headers = dict(self.__request_auth_headers(), **headers) + return requests.get(url, params=params, headers=headers) + + def __POST(self, url, params={}, headers={}, data=None): + headers = dict(self.__request_auth_headers(), **headers) + return requests.post(url, params=params, headers=headers, data=data) + + def __PATCH(self, url, params={}, headers={}, data=None): + headers = dict(self.__request_auth_headers(), **headers) + return requests.patch(url, params=params, headers=headers, data=data) + + def get_list(self, limit=None, offset=None): + params = {} + if limit: + params['limit'] = limit + if offset: + params['offset'] = offset + + resp = self.__GET("{0}/member/".format(self._base_url), params=params) + resp.raise_for_status() + return json.loads(resp.content) + def get(self, member_id, memberships=None, groups=None): - resp = requests.get("{0}/member/{1}/".format(self._base_url, member_id), params=dict(username=self._username, api_key=self._api_key, memberships=memberships, groups=groups), data=None) + resp = self.__GET("{0}/member/{1}/".format(self._base_url, member_id), params=dict(memberships=memberships, groups=groups)) resp.raise_for_status() return json.loads(resp.content) def get_groups(self, member_id): - resp = requests.get("{0}/member/{1}/groups/".format(self._base_url, member_id), params=dict(username=self._username, key=self._api_key,), data=None) + resp = self.__GET("{0}/member/{1}/groups/".format(self._base_url, member_id)) resp.raise_for_status() return json.loads(resp.content) def update(self, member_id, password=None): #TODO more attributes - resp = requests.patch("{0}/member/{1}/".format(self._base_url, member_id), params=dict(username=self._username, api_key=self._api_key), data=json.dumps(dict(password=password)), headers={'content-type': 'application/json'}) + resp = self.__PATCH("{0}/member/{1}/".format(self._base_url, member_id), data=json.dumps(dict(password=password)), headers={'content-type': 'application/json'}) resp.raise_for_status() # Response body is empty return True