From 7e7adc64713f74976d5994af36b5f758620fb37b Mon Sep 17 00:00:00 2001
From: RaNaN <Mast3rRaNaN@hotmail.de>
Date: Sat, 13 Oct 2012 21:39:58 +0200
Subject: added JSON and WS client, re organized tests, new classes for easier
 api tests

---
 module/remote/JSONClient.py | 52 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 module/remote/JSONClient.py

(limited to 'module/remote/JSONClient.py')

diff --git a/module/remote/JSONClient.py b/module/remote/JSONClient.py
new file mode 100644
index 000000000..52b712c81
--- /dev/null
+++ b/module/remote/JSONClient.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from json_converter import loads, dumps
+from urllib import urlopen, urlencode
+from httplib import UNAUTHORIZED, FORBIDDEN
+
+class JSONClient:
+    URL = "http://localhost:8001/api"
+
+    def __init__(self, url=None):
+        self.url = url or self.URL
+        self.session = None
+
+    def request(self, path, data):
+        ret = urlopen(self.url + path, urlencode(data))
+        if ret.code == 404:
+            raise AttributeError("Unknown Method")
+        if ret.code == 500:
+            raise Exception("Remote Exception")
+        if ret.code == UNAUTHORIZED:
+            raise Exception("Unauthorized")
+        if ret.code == FORBIDDEN:
+            raise Exception("Forbidden")
+        return ret.read()
+
+    def login(self, username, password):
+        self.session = loads(self.request("/login", {'username': username, 'password': password}))
+        return self.session
+
+    def logout(self):
+        self.call("logout")
+        self.session = None
+
+    def call(self, func, *args, **kwargs):
+        # Add the current session
+        kwargs["session"] = self.session
+        path = "/" + func + "/" + "/".join(dumps(x) for x in args)
+        data = dict((k, dumps(v)) for k, v in kwargs.iteritems())
+        rep = self.request(path, data)
+        return loads(rep)
+
+    def __getattr__(self, item):
+        def call(*args, **kwargs):
+            return self.call(item, *args, **kwargs)
+
+        return call
+
+if __name__ == "__main__":
+    api = JSONClient()
+    api.login("User", "test")
+    print api.getServerVersion()
\ No newline at end of file
-- 
cgit v1.2.3