From 9d84c5b68a0abb5e3e2ffe83935192b2b017104c Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Sun, 27 Oct 2013 21:20:48 +0100 Subject: [PATCH] Initial commit --- .gitignore | 3 +++ README.md | 5 +++++ example.py | 20 ++++++++++++++++++++ pydusken/__init__.py | 27 +++++++++++++++++++++++++++ pydusken/groups.py | 0 pydusken/members.py | 27 +++++++++++++++++++++++++++ pydusken/memberships.py | 0 requirements.txt | 1 + 8 files changed, 83 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 example.py create mode 100644 pydusken/__init__.py create mode 100644 pydusken/groups.py create mode 100644 pydusken/members.py create mode 100644 pydusken/memberships.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d2ff2db --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +venv +*.swp +*.pyc diff --git a/README.md b/README.md new file mode 100644 index 0000000..0f6eb72 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +Python client API wrapper for [DUSKEN](http://git.neuf.no/?p=dusken.git). + +Inspired by [trello](https://pypi.python.org/pypi/trello). + +See example.py to get started. diff --git a/example.py b/example.py new file mode 100644 index 0000000..d2c303c --- /dev/null +++ b/example.py @@ -0,0 +1,20 @@ +import pprint +import json + +import pydusken + +# credentials +username = "admin" +password = "admin" + +# setup client +client = pydusken.DuskenApi(username=username, password=password) + +# get member +pprint.pprint(client.members.get('1')) + +# get member groups +pprint.pprint(client.members.get_groups('1')) + +# update member password to the same password as you have +pprint.pprint(client.members.update('1', password='admin')) diff --git a/pydusken/__init__.py b/pydusken/__init__.py new file mode 100644 index 0000000..4a6290f --- /dev/null +++ b/pydusken/__init__.py @@ -0,0 +1,27 @@ +import json +import requests +from urllib import quote_plus +from .members import Members +#from .membership import Memberships +#from .groups import Groups + + +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): + self._username = username + self._api_key = self.get_api_key(username, password) + self.members = Members(username, self._api_key, self._base_url) + #self.memberships = Memberships(username, self._apikey, self._base_url) + #self.groups = Groups(username, self._apikey, self._base_url) + + def set_creds(self, token): + # TODO set creds for each type here + pass + + def get_api_key(self, username, password): + resp = requests.post("http://127.0.0.1:8000/authenticate/".format(self._base_url), data=dict(username=username, password=password)) + resp.raise_for_status() + return json.loads(resp.content).get('api_key') diff --git a/pydusken/groups.py b/pydusken/groups.py new file mode 100644 index 0000000..e69de29 diff --git a/pydusken/members.py b/pydusken/members.py new file mode 100644 index 0000000..c5c29c4 --- /dev/null +++ b/pydusken/members.py @@ -0,0 +1,27 @@ +import json +import requests + +class Members(object): + __module__ = 'pydusken' + + def __init__(self, username, api_key, base_url): + self._username = username + self._api_key = api_key + self._base_url = base_url + + 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.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.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.raise_for_status() + # Response body is empty + return True diff --git a/pydusken/memberships.py b/pydusken/memberships.py new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3c655d8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +requests==2.0.1