import json from urllib2 import urlopen, HTTPError, URLError from urllib import urlencode class PadServer (object): def __init__ (self, hostname, port=9001, apipath="/api/", apiversion="1.2.9", apikey=None, secure=False): self.hostname = hostname if secure: self.protocol = "https" else: self.protocol = "http" self.apiurl = self.protocol+"://"+hostname if port: self.apiurl += ":{0}".format(port) self.apiurl += "{0}{1}/".format(apipath, apiversion) self.apikey = apikey def listAllPads (self): data = {'apikey': self.apikey} url = self.apiurl+'listAllPads?'+urlencode(data) return json.load(urlopen(url))['data']['padIDs'] def listAllGroups (self): data = {'apikey': self.apikey} url = self.apiurl+'listAllGroups?'+urlencode(data) return json.load(urlopen(url))['data']['groupIDs'] def getPadText (self, padID): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8")} return json.load(urlopen(self.apiurl+'getText?'+urlencode(data)))['data']['text'] def getPadHTML (self, padID): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8")} return json.load(urlopen(self.apiurl+'getHTML?'+urlencode(data)))['data']['html'] def getPadLastEdited (self, padID): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8")} raw = json.load(urlopen(self.apiurl+'getLastEdited?'+urlencode(data)))['data']['lastEdited'] try: return datetime.fromtimestamp(int(raw)/1000) except TypeError as e: return None def getPadURL (self, padID, groupinfo=None): group, name = pad_split_group(padID) if group: gid = group if gid.startswith("g."): gid = gid[2:] if groupinfo: ginfo = groupinfo.get(gid) if ginfo: groupID = ginfo.get("id", 0) else: groupID = 0 else: groupID = 0 return self.protocol+"://"+self.hostname+"/group.html/"+str(groupID)+"/pad.html/"+padID else: return self.protocol+"://"+self.hostname+"/public_pad/"+padID def getRevisionsCount (self, padID): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8")} raw = json.load(urlopen(self.apiurl+'getRevisionsCount?'+urlencode(data)))['data']['revisions'] return int(raw) def listAuthorsOfPad (self, padID): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8")} raw = json.load(urlopen(self.apiurl+'listAuthorsOfPad?'+urlencode(data)))['data']['authorIDs'] return raw def getRevisionChangeset (self, padID, rev=None): data = {'apikey': self.apikey, 'padID': padID.encode("utf-8"), 'rev': "{0}".format(rev)} raw = json.load(urlopen(self.apiurl+'getRevisionChangeset?'+urlencode(data))) return raw def createDiffHTML (self, padID, startRev=0, endRev=None): if endRev == None: endRev = getRevisionsCount(self, padID) data = {'apikey': self.apikey, 'padID': padID.encode("utf-8"), 'startRev': "{0}".format(startRev), 'endRev': "{0}".format(endRev)} raw = json.load(urlopen(self.apiurl+'createDiffHTML?'+urlencode(data)))['data'] return raw