def writeFile(f, content): out = codecs.open(f, encoding="utf-8", mode="w") out.write(content) out.close() if __name__ == "__main__": try: pw = open("/root/.ep_api_key", "r").read().strip() ep = EtherpadLiteClient(base_params={"apikey": pw}, api_version="1.2.10") except: e = sys.exc_info()[0] print "Problem logging into Etherpad via API: {0}".format(e) sys.exit(1) os.environ["TZ"] = "US/Eastern" pads = ep.listAllPads() recent = [] for p in pads["padIDs"]: if not p: continue recent.append((p, ep.getLastEdited(padID=p)["lastEdited"])) recent_sorted = sorted(recent, key=lambda p: p[1], reverse=True) recent_html = [] for i in recent_sorted: t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(str(i[1])[0:10]))) recent_html.append(link.format(i[0], t)) writeFile(path, page_template.format("\n".join(recent_html)))
class Etherpad(object): def __init__(self): self.api = EtherpadLiteClient( api_version='1.2.1', base_url='{0}/api/'.format(settings.ETHERPAD_URL), base_params={'apikey': settings.ETHERPAD_API_KEY}) def _get_ep_user(self, user): ldap_user = user.get_ldapuser() return self.api.createAuthorIfNotExistsFor( authorMapper=user.id, name=ldap_user.display_name.encode('utf-8'), )['authorID'] def create_group_pad(self, group_name, pad_name): """ Creates a Pad for Group """ try: self.api.createGroupPad( groupID=self.get_group_id(group_name), padName=pad_name.encode('utf-8')) except EtherpadException as e: # test if pad was already created, if so it's ok if e.message == "padName does already exist": return raise def create_session(self, user, group_name): group = self.get_group_id(group_name) user_ep = self._get_ep_user(user) # first we delete old sessions activ_sessions = self.api.listSessionsOfGroup(groupID=group) if activ_sessions: for sessionID, data in activ_sessions.items(): if data['authorID'] == user_ep: if data['validUntil'] > time.time() + MIN_SESSION_REMAIN_TIME: # There is a valid session with over 6 hours # remaining time return else: # we delete the old Session so the user has not two # on the same group. (technickal no problem, # but the cookies will have more data self.api.deleteSession(sessionID=sessionID) # we create a new session self.api.createSession( groupID = group, authorID = user_ep, validUntil = time.time() + SESSION_DURATION) def get_session_cookie(self, user): sessions = self.api.listSessionsOfAuthor( authorID= self._get_ep_user(user) ) # We have to escape the comma with %2C because otherwise Django's # HttpResponse.set_cookie escapes it, but Etherpad can't read # the escaped value correctly. sessions_cookie = '%2C'.join(sessions.keys()) return sessions_cookie def get_group_id(self, group_name): return self.api.createGroupIfNotExistsFor( groupMapper=group_name.encode('utf-8') )["groupID"] def get_group_pads(self, group_name): try: return self.api.listPads(groupID=self.get_group_id(group_name))['padIDs'] except EtherpadException as e: if e.message == "groupID does not exist": # no pads for this group return [] raise def delete_pad(self, pad_name): try: self.api.deletePad(padID=pad_name.encode('utf-8')) except EtherpadException as e: if e.message == "padID does not exist": return raise def delete_group(self, group_name): self.api.deleteGroup(groupID=self.get_group_id(group_name)) def get_last_edit(self, pad_name): try: return float(self.api.getLastEdited(padID=pad_name.encode('utf-8'))['lastEdited']) / 1000 except EtherpadException as e: if e.message == "padID does not exist": return 0 raise except TypeError: # LastEdited is None return 0 def get_html(self, pad_name): try: return self.api.getHTML(padID=pad_name.encode('utf-8'))['html'] except EtherpadException as e: if e.message == "padID does not exist": return "" raise
class Etherpad(object): def __init__(self): self.api = EtherpadLiteClient( api_version='1.2.1', base_url='{0}/api'.format(settings.ETHERPAD_URL), base_params={'apikey': settings.ETHERPAD_API_KEY}) def _get_ep_user(self, user): ldap_user = user.get_ldapuser() return self.api.createAuthorIfNotExistsFor( authorMapper=str(user.id), name=ldap_user.display_name.encode('utf-8'), )['authorID'] def create_group_pad(self, group_name, pad_name): """ Creates a Pad for Group """ try: self.api.createGroupPad(groupID=self.get_group_id(group_name), padName=pad_name.encode('utf-8')) except EtherpadException as e: # test if pad was already created, if so it's ok if str(e) == "padName does already exist": return raise def create_session(self, user, group_name): group = self.get_group_id(group_name) user_ep = self._get_ep_user(user) # first we delete old sessions activ_sessions = self.api.listSessionsOfGroup(groupID=group) if activ_sessions: for sessionID, data in list(activ_sessions.items()): if data['authorID'] == user_ep: if data['validUntil'] > time.time( ) + MIN_SESSION_REMAIN_TIME: # There is a valid session with over 6 hours # remaining time return else: # we delete the old Session so the user has not two # on the same group. (technickal no problem, # but the cookies will have more data self.api.deleteSession(sessionID=sessionID) # we create a new session self.api.createSession(groupID=group, authorID=user_ep, validUntil=str(time.time() + SESSION_DURATION)) def get_session_cookie(self, user): sessions = self.api.listSessionsOfAuthor( authorID=self._get_ep_user(user)) # We have to escape the comma with %2C because otherwise Django's # HttpResponse.set_cookie escapes it, but Etherpad can't read # the escaped value correctly. sessions_cookie = '%2C'.join(list(sessions.keys())) return sessions_cookie def get_group_id(self, group_name): return self.api.createGroupIfNotExistsFor( groupMapper=group_name.encode('utf-8'))["groupID"] def get_group_pads(self, group_name): try: return self.api.listPads( groupID=self.get_group_id(group_name))['padIDs'] except EtherpadException as e: if str(e) == "groupID does not exist": # no pads for this group return [] raise def delete_pad(self, pad_name): try: self.api.deletePad(padID=pad_name.encode('utf-8')) except EtherpadException as e: if str(e) == "padID does not exist": return raise def delete_group(self, group_name): self.api.deleteGroup(groupID=self.get_group_id(group_name)) def get_last_edit(self, pad_name): try: return float( self.api.getLastEdited( padID=pad_name.encode('utf-8'))['lastEdited']) / 1000 except EtherpadException as e: if str(e) == "padID does not exist": return 0 raise except TypeError: # LastEdited is None return 0 def get_html(self, pad_name): try: return self.api.getHTML(padID=pad_name.encode('utf-8'))['html'] except EtherpadException as e: if str(e) == "padID does not exist": return "" raise
out = codecs.open(f, encoding='utf-8', mode='w') out.write(content) out.close() if __name__ == '__main__': try: pw = open('/root/.ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) os.environ['TZ'] = 'US/Eastern' pads = ep.listAllPads() recent = [] for p in pads['padIDs']: if not p: continue recent.append((p, ep.getLastEdited(padID=p)['lastEdited'])) recent_sorted = sorted(recent, key=lambda p: p[1], reverse=True) recent_html = [] for i in recent_sorted: t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(str(i[1])[0:10]))) recent_html.append(link.format(i[0], t)) writeFile(path, page_template.format('\n'.join(recent_html)))
out = codecs.open(f, encoding='utf-8', mode='w') out.write(content) out.close() if __name__ == '__main__': try: pw = open('/root/.ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) os.environ['TZ'] = 'US/Eastern' pads = ep.listAllPads() recent = [] for p in pads['padIDs']: if not p: continue recent.append((p, ep.getLastEdited(padID=p)['lastEdited'])) recent_sorted = sorted(recent, key=lambda p: p[1], reverse=True) recent_html = [] for i in recent_sorted: t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(str(i[1])[0:10]))) recent_html.append(link.format(i[0], t)) writeFile(path, page_template.format('\n'.join(recent_html)))