|
|
@ -8,6 +8,8 @@ from xml.etree import ElementTree as ET |
|
|
|
from urllib import urlencode |
|
|
|
from urlparse import urljoin |
|
|
|
from datetime import datetime |
|
|
|
from padserver import PadServer |
|
|
|
|
|
|
|
|
|
|
|
PADINFO_DEFAULTS = { |
|
|
|
"hostname": "", |
|
|
@ -34,63 +36,6 @@ def content(tag): |
|
|
|
else: |
|
|
|
return tag.text + u''.join(ET.tostring(e) for e in tag) |
|
|
|
|
|
|
|
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 get_template_env (tpath=None): |
|
|
|
import jinja2 |
|
|
@ -291,6 +236,8 @@ if __name__ == "__main__": |
|
|
|
parser.add_argument('--groupinfo', default=None, help='(index) groupinfo json file') |
|
|
|
parser.add_argument('--output', default=None, help='(index) path for output (default stdout)') |
|
|
|
|
|
|
|
parser.add_argument('--pad', default="start", help='(history) pad id') |
|
|
|
parser.add_argument('--rev', default="", help='(history) revision id') |
|
|
|
|
|
|
|
args = parser.parse_args() |
|
|
|
|
|
|
@ -448,6 +395,19 @@ if __name__ == "__main__": |
|
|
|
if args.output: |
|
|
|
out.close() |
|
|
|
|
|
|
|
elif cmd == "revisions": |
|
|
|
print (padserver.getRevisionsCount(args.pad)) |
|
|
|
|
|
|
|
elif cmd == "authors": |
|
|
|
print (padserver.listAuthorsOfPad(args.pad)) |
|
|
|
|
|
|
|
elif cmd == "changeset": |
|
|
|
print (padserver.getRevisionChangeset(args.pad, args.rev)) |
|
|
|
|
|
|
|
elif cmd == "history": |
|
|
|
revs = padserver.getRevisionsCount(args.pad) |
|
|
|
data = padserver.createDiffHTML(args.pad, 1, revs) |
|
|
|
print (data['html']) |
|
|
|
|
|
|
|
else: |
|
|
|
print ("Command '{0}' not understood, try: listpads, listgroups, dump".format(args.command), file=sys.stderr) |
|
|
|