1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
'''
Created on Jan 31, 2011
@author: leifj
'''
from lxml import etree
import httplib2
from urllib import quote
import logging
from pprint import pformat
import os
import tempfile
class ACPException(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return etree.tostring(self.value)
class ACPResult():
def __init__(self,content):
self.et = etree.fromstring(content)
self.status = self.et.find('status')
def is_error(self):
return self.status.get('code') != 'ok'
def exception(self):
raise ACPException,self.status
def get_principal(self):
return self.et.find('principal')
def _enc(v):
ev = v
if isinstance(ev,str) or isinstance(ev,unicode):
ev = ev.encode('iso-8859-1')
return ev
class ACPClient():
def __init__(self,url,username=None,password=None):
self.url = url
self.session = None
if username and password:
self.login(username,password)
def request(self,method,p={},raise_error=False):
url = self.url+"?"+"action=%s" % method
if self.session:
url = url + "&session=%s" % self.session
u = []
for (k,v) in p.items():
if v:
kv = "%s=%s" % (k,quote(str(v)))
u.append(kv)
url = url + "&" + "&".join(u)
h = httplib2.Http(tempfile.gettempdir()+os.sep+".cache");
logging.debug(url)
resp, content = h.request(url, "GET")
logging.debug(pformat(resp))
logging.debug(pformat(content))
if resp.status != 200:
raise ACPException,resp.reason
if resp.has_key('set-cookie'):
cookie = resp['set-cookie']
if cookie:
avp = cookie.split(";")
if len(avp) > 0:
av = avp[0].split('=')
self.session = av[1]
r = ACPResult(content)
if r.is_error() and raise_error:
raise r.exception()
return r;
def login(self,username,password):
result = self.request('login',{'login':username,'password':password})
if result.is_error():
raise result.exception()
|